是否可以单独实现业务逻辑层(基于CSLA)并从winform,silverlight等不同的表示技术中使用它。存在用于Silverlight的CSLA。这是否意味着为不同的表示技术实现和维护不同的BLL。
任何帮助都将不胜感激。
答案 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'下列出)