如何基于CSLA实现单个业务逻辑层并从WPF,Winform和Silverlight中使用它?

时间:2010-03-05 04:59:53

标签: silverlight csla

是否可以单独实现业务逻辑层(基于CSLA)并从winform,silverlight等不同的表示技术中使用它。存在用于Silverlight的CSLA。这是否意味着为不同的表示技术实现和维护不同的BLL。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

使用CodeSmith CSLA templates非常容易。我们有一个位于here的PetShop Silverlight MVVM和Web示例应用程序,它显示了生成的代码。

由于 -Blake Niemyjski(CodeSmith CSLA Templates的作者)

答案 1 :(得分:0)

CSLA很有可能。使用不同UI技术的BLL的主要区别在于使用了Begin& amp; CSLA for Silverlight中数据门户调用的回调机制。如果您对所有UI技术使用此机制,则可以使用相同的BLL。

我建议你为BLL使用单独的Factory对象,这样你就可以决定何时使用BeginInvoke&回调机制和您的业务对象将不受影响。

如果您觉得有必要,也可以创建重复的工厂方法。例如,如果您有一个Customer的业务对象:

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的'Samples'下列出)