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

新谷将亮 [E-MAIL ADDRESS DELETED]
2016年 6月 8日 (水) 11:09:19 JST


こんにちは

回答いただき、ありがとうございます。

taknb2nch様が言うようにQuillの理解で誤っていた部分がありましたので、
大変勉強になりました。

移行前プロジェクトでは、起動時にテーブルBhvクラスをすべてコンテナに登録するようにしており、
おそらく、竹内様の抽象クラスにするというのが、一番、現実的な方法かなと思いました。

>コンポーネントとなるクラスのコンストラクタにInject呼び出しをするのもおすすめできません。
⇒内容は理解しました。
しかし、複雑なプロジェクトのため、まだ検証できておらず、今後、実装していこうと思います。

元々の質問においては、
メンバー変数をすべて定義しないといけないということで、
その方法は、今後の検討課題になると思います。

皆様からご指摘いただいた部分をまだ、すべては検証できていませんが、
取り急ぎ、返信させていただきます。

まだまだ理解不足な点が多くなってしまい、
ご指摘に対して、的外れな回答をしているかもしれませんが、
宜しくお願い致します。

2016年6月8日 10:04 竹内学 <mtakeuchi @ ailesys.co.jp>:

> 新谷さん
>
> こんにちは竹内です。
>
> > しかし、テーブルの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
>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20160608/0ec19a60/attachment.html>


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