[seasar-dotnet:2502] Re: DBFlute+Quillについて

竹内学 [E-MAIL ADDRESS DELETED]
2016年 6月 8日 (水) 10:04:32 JST


新谷さん

こんにちは竹内です。

> しかし、テーブルのBhvクラスをメンバ変数としてしまうと、
> 全てのテーブルのBhvクラスをメンバ変数としてコンテナに登録する必要がでてきてしまいます。

基本的には使用したい Bhv は全部メンバとして記述が必要になります。

そこで、
public abstract class AbstractService {
   // 全ての Bhv を列挙
   protect ATableBhv _aTableBhv;
   protect BTableBhv _bTableBhv;
       :
       :
}

と抽象クラスを作成し、これを継承するようにします。

新谷さんのパターンですと、TestBhvService は TestBase クラスを継承している様ですので、

public class TestBase : AbstractService, ... {
}

の様に記述します。

同様に Bhv を使いたいクラスは全部 AbstractService を継承元とすれば良いのです。

御参考までに。

p.s.
dynamic 型は便利ですが、実行時にメンバが含まれているかどうかが判明するので、
DBFlute の特徴の一つ、「データベースの構造変化に強い」をスポイルしてしまうと思います。
複雑なプロジェクトであればあるほど、この特徴は重要になってきます。

使わざるを得ない場合を除き使わない方が、開発スピードが上がることになると思います。
滅多に通らないパスだったりすると、テストでなかなか発見できなかったりしますしね。



2016年6月7日 10:18 新谷将亮 <ms630928s @ gmail.com>:

> こんにちは、新谷です。
>
> 以前質問させていただいた、DB接続について、
> 正しく動作するようになりました。
> ありがとうございます。
>
> 今回は、DBFlute+Quillの使用について、質問させていただきます。
>
> 環境
> ・.NET Framework4.6.1
> ・DBFlute.NET:dbflute-0.8.9.59
> ・s2container.net:1.4.1
>
> 下記のようなソースがあります。
>
> ===================================================
> using Core.DBFlute.CBean;
> using Core.DBFlute.ExBhv;
> using Core.DBFlute.ExEntity;
>
>   [Implementation(typeof(TestBhvService))]
>   public interface ITestBhvService
>   {
>     テーブルEntityクラス GetK010Info(int intNumber);
>   }
>
>   public class TestBhvService : TestBase, ITestBhvService
>   {
> QuillContainer container;
>
>     /// <summary>
>     /// コンストラクタ
>     /// </summary>
>     public TestBhvService()
>     {
>       QuillInjector injector = QuillInjector.GetInstance();
>       container = injector.Container;
>       QuillInjector.GetInstance().Inject(this);
>     }
>
>     protected テーブルBhvクラス bhv; ←この行が削除できないか?
>
>     /// <summary>
>     /// マスタ取得
>     /// </summary>
>     public テーブルEntityクラス GetK010Info(int intNumber)
>     {
>       QuillComponent component =
> container.GetComponent(typeof(テーブルBhvクラス));
>
>       テーブルBhvクラス bhv =
> (テーブルBhvクラス)component.GetComponentObject(typeof(テーブルBhvクラス));
>
>       テーブルCBクラス cb = new テーブルCBクラス();
>
>       cb.Query().Setキー_Equal(intNumber);
>
>       return bhv.SelectEntity(cb);
>     }
>   }
>
> ===================================================
>
> 上記ソースでは正常に動作します。
>
> しかし、テーブルのBhvクラスをメンバ変数としてしまうと、
> 全てのテーブルのBhvクラスをメンバ変数としてコンテナに登録する必要がでてきてしまいます。
>
> DBFluteもQuillに対応しているため、
> そのようなことはしなくても良いと思っているのですが、
> S2ContainerのようにDBFlute.diconも使用しないため、
> どこで、対象のクラス(今回の場合、テーブルBhvクラス)をQuillContainerに登録すればよいのでしょうか?
> (コンストラクタでコンテナへの登録をし、「GetK010Info」内でコンテナから取り出せると思っております。)
>
> DBFluteの質問をこのメーリングリストに送るのは適切ではないかもしれませんが、
> 可能であれば、教えていただけませんでしょうか。
>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>


-- 
竹内 学 <mailto:mtakeuchi @ ailesys.co.jp>
株式会社エールシステム
〒384-0083 長野県小諸市大字市665-9
Phone: 0267-25-5990
Facsimile: 0267-26-1324
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20160608/25c48552/attachment.html>


seasar-dotnet メーリングリストの案内