3ティアアプリのサブソニックリポジトリを始める
-
26-10-2019 - |
質問
すぐにアクティブなレコードを実行することができました。始めるための指示は素晴らしく、すぐに既存のDBでウィジェットを作成して読むことができるWebサービスを作成しました。それはすごかった。しかし、更新に関しては、物事はバラバラになりました。クライアントのオブジェクトを編集してサービスに送り返しますが、サービスが保存されたら、新しいものを作成するだけです。これは、DBを再度クエリしてクライアントからサービスに送信された値を割り当てる必要があることを意味すると推論しましたが、上司はそれがハッキーであり、Pocosを使用できるため、リポジトリパターンの方が良いと言いました。残念ながら、それが私が得たガイダンスの範囲です。だからここに私の質問があります。
T4テンプレートはアクティブレコードにのみ適しているか、またはあなたのためにあなたの簡単なリポジトリを構築するでしょうか。たとえば、私のpocosを上に上げる何かがありますか、それともすべて「あなた自身のロール」ですか?
亜音速3ティアソリューションの実用的な例を見た人はいますか?私はそれらについて読みましたが、周りに浮かぶサンプルはありますか?
アクティブなレコードサンプル/スクリーンキャストは、私が始めたのと同じ時点で開始したため、非常に簡単に従うことができました。単純なリポジトリのものは、移行やその他の高度な機能にもっと焦点を当てているようで、このようなものは私にとって新しいものであるため、ドットを接続するのに十分なことはありません。
うーん。何かを学び、週の終わりまでにそれを実行する期限があることに似たものはありません。私が読むべきだったマニュアルへのリンクがあるRTFMであっても、どんなアドバイスも歓迎します。
前もって感謝します
解決
リポジトリパターンを使用する場合は、 linqテンプレート または、T4テンプレートを必要としない簡単なリポジトリを使用します。
シンプルなリポジトリを使用すると、自分でpocosを作成します。 Subsonicは、選択した場合、データベーススキームを作成または更新できます。
var repository=new SimpleRepository(SimpleRepositoryOptions.RunMigrations);
しかし、あなたが私に尋ねると私は選ぶでしょう SimpleRepositoryOptions.None
自分でデータベースを更新します。
とにかく、ActiverCordテンプレートに関する最初の問題は非常に簡単に修正できます。 ActiverCordオブジェクトはクライアント側でシリアル化され、サーバーで脱色をすることをお勧めします。
ActiverCordオブジェクトのデフォルトのコンストラクターは、次のようなinit関数を呼び出します。
void Init(){
TestMode=this._db.DataProvider.ConnectionString.Equals("test", StringComparison.InvariantCultureIgnoreCase);
_dirtyColumns=new List<IColumn>();
if(TestMode){
<#=tbl.ClassName#>.SetTestRepo();
_repo=_testRepo;
}else{
_repo = new SubSonicRepository<<#=tbl.ClassName#>>(_db);
}
tbl=_repo.GetTable();
SetIsNew(true);
OnCreated();
}
ご覧のとおり、内部リポジトリが作成され、 SetIsNew(true)
実行されます。あなたがしなければならない唯一のことは電話することです myitem.SetIsNew(false)
オブジェクトに脱色値が入力された後。 SubsonicにSave中に更新クエリを実行するのに十分であると思います。