0

ビジネスロジックレイヤー(CSLAに基づく)の単一の実装を持ち、winform、silverlightなどのさまざまなプレゼンテーションテクノロジーからそれを使用することは可能ですか.Silverlight用のCSLAが存在します. それは、さまざまなプレゼンテーション テクノロジに対してさまざまな BLL を実装および維持することを意味しますか。

どんな助けでも大歓迎です。

4

2 に答える 2

2

これは、CodeSmith CSLA テンプレートを使用すると非常に簡単です。生成されたコードを示すPetShop Silverlight MVVM と Web サンプル アプリケーションがここにあります。

ありがとう -Blake Niemyjski ( CodeSmith CSLA テンプレートの作成者)

于 2010-08-17T22:25:13.510 に答える
0

これは、CSLA では非常に可能です。さまざまな UI テクノロジで BLL を使用する場合の主な違いは、Silverlight の CSLA でのデータ ポータル呼び出しの開始およびコールバック メカニズムの使用です。このメカニズムをすべての UI テクノロジに使用すると、同じ BLL を使用できるようになります。

BLL には別の Factory オブジェクトを使用することをお勧めします。これにより、いつ BeginInvoke および Callback メカニズムを使用するかを決定でき、ビジネス オブジェクトは変更されません。

必要に応じて、重複したファクトリ メソッドを作成することもできます。たとえば、Customer のビジネス オブジェクトがあるとします。

public class Customer : Csla.BusinessBase<Customer>
{
    private Customer() { }

    private void DataPortal_Fetch(SingleCriteria<Customer, int> criteria)
    { // populate here }

}

次に、Silverlight とその他の UI テクノロジの両方のメソッドを含む CustomerFactory オブジェクトを作成できます。

public static class CustomerFactory
{
    // Handle most UI needs
    public static Customer Fetch(int id)
    {
        return DataPortal.Fetch<Customer>(new SingleCriteria<Customer, int>(id));
    }

    // Handle Silverlight needs
    public static void Fetch(int id)
    {
        DataPortal.BeginFetch<Customer>(id, FetchCallback); 
    }

    private static FetchCallback(object sender, DataPortalResult<Customer> result)
    {
        // notify the UI of result.Object
    }
}

また、もう少し賢く、IoC コンテナーを介して依存性注入を実装して、ファクトリ メソッドの呼び出しをもう少し賢くすることもできます。

要するに、実際のビジネス オブジェクトは変更されませんが、ファクトリ オブジェクトは特定の状況で CRUD メソッドが重複している可能性があります。

Rocky の Web サイトには、複数の UI レイヤーを持つ単一の BLL を実装するサンプル (ProjectTracker) があります ( http://www.lhotka.net/cslanet/Download.aspxの「サンプル」の下にリストされています) 。

于 2010-03-05T13:40:31.740 に答える