簡単ドメインモデル実装

今考えているフレームワークではドメインモデル(リッチなデータ)を実装すればあとは自動的にフレームワークが処理してくれます。いい感じに仕上がりそうです。GenericsとRealProxyの利用が中心で、Emitは全く使っていませんがかなりのことができますね。

[AutoPersistAttribue(typeof(AuthorsDataSet))]
public interface IAuthorsService 
{
    [Transaction(TransactionMode.WriteAction)]
    void Contact(string au_id);
}

partial class AuthorsDataSet 
    : IRepositoryPolicyProvider, IAuthorsService
{
    public void Contact(string au_id)
    {
        this.authors.FindByau_id(au_id).contract = true;
    }

    //リポジトリのメタ情報 永続化のタイミングで検証するSpecificationを指定することも可能
    public RepositoryPolicy Policy
    {
        get { return new RepositoryPolicy("PUBSConnectionString","authors"); }
    }
}

公開するサービスのインタフェースを定義しDataSetのpartialクラスに実装すると、あとはサービスリポジトリからインタフェースを指定してサービスのインスタンスを取得して該当の処理を呼び出せば、自動的にデータベースからデータを取り出し、作成した該当の処理を呼び出してくれます。さらに、該当の処理でデータを変更した場合自動的にデータベースに書き戻してくれます。もちろん例外が発生すればRollbackします。

[TestMethod]
public void TestMethod1()
{
    IAuthorsService service
        = ServiceRepository.GetService();
    service.Contact("172-32-1176");
}