Soma 0.7.0.0 のC#サポートについて
Soma 0.7.0.0 で C#(やVB.NET)のサポートを強化しました。このエントリではその点について紹介します。
まず、Soma.Core.Dbの全メソッドがオーバーライド可能です。ですので、ちょっとフックしてアプリに共通の機能を入れたりと便利に使えます。
たとえば、次のコードのように更新日付は一律自動で設定するとかです。
internal class MyDb : Db { public MyDb(IDbConfig config) : base(config) { } public override void Update<T>(T entity) { var prop = typeof(T).GetProperty("ModifiedDate"); if (prop != null) { prop.SetValue(entity, DateTime.UtcNow, null); } base.Update<T>(entity); } }
それから、Soma.Core.DbはSoma.Core.IDbインタフェースを実装するようにしたので、インタフェース越しにアクセスするようにしておくと柔軟です。
たとえば、次のコードのようにファクトリで生成するとかするといいかもしれません。
internal class DbFactory { public IDb Create() { return new MyDb(new MyConfig()); } }
インタフェースがあることで状況に応じてラップしたりが簡単です。
public IDb Wrap(IDb db) { return new Wrapper(db); }
どうしてもADO.NETのAPIを直接触らないといけないときは、IDb.DbConfigプロパティを使ってください。
IDb.DbConfigプロパティはSoma.Core.IDbConfigインタフェースを返します、ここからはInvariantやConnectionStringが取得できます。
この2つがあればどのDBにもつなげられると思います。
Soma全体はもともとF#で使いやすいように考えましたが、Soma.Core.DbクラスやSoma.Core.IDbインタフェースについてはC#やVB.NETからアクセスしやすいように作っています。C#やVB.NETでも使いやすそうだなーと思ってもらえるとうれしいですね。
ちなみに、Somaのpublicなクラス・インタフェース・列挙型・例外型はすべてSoma.Core名前空間に含まれています。全部で30個くらい。このあたりも使いやすいんじゃないかと思っています!