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 来说是非常可能的。将 BLL 与不同的 UI 技术一起使用的主要区别在于,在 Silverlight 的 CSLA 中使用数据门户调用的 Begin & Callback 机制。如果您对所有 UI 技术都使用此机制,这将允许您使用相同的 BLL。

我建议您为 BLL 使用单独的工厂对象,以便您可以决定何时使用 BeginInvoke 和回调机制,并且您的业务对象不会受到影响。

如果您认为有必要,您还可以创建重复的工厂方法。例如,如果您有一个客户业务对象:

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

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

}

然后,您可以拥有一个 CustomerFactory 对象,其中包含 Silverlight 和其他 UI 技术的两种方法:

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 实际上有一个示例 (ProjectTracker),它在他的网站上实现了具有多个 UI 层的单个 BLL(在http://www.lhotka.net/cslanet/Download.aspx的“示例”下列出)

于 2010-03-05T13:40:31.740 回答