簡単ドメインモデル実装
今考えているフレームワークではドメインモデル(リッチなデータ)を実装すればあとは自動的にフレームワークが処理してくれます。いい感じに仕上がりそうです。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"); }