我有一个存在于3种不同表示层中的应用程序... web,移动(脱机)和桌面(脱机)。这三个核心业务对象都是相同的,它们共享相同的验证和业务规则。但是,它们都使用不同的数据库(网络 - SQL Server 2008,移动/桌面 - SQL Compact)。通过同步过程,桌面和移动应用程序可以从服务器的SQL 2008数据库中推送和接收数据。针对通用业务层但不同表示层和数据层的N层设计
我试图想出最好的n层方法,我有点卡住了。我为我的业务对象创建了一个封装所有业务规则的程序集。我非常希望这个程序集中的每个对象都有一个Save()方法。但是,我不希望此图层知道任何特定的数据层。基本上,我希望所有三个表示层都填充这些对象并调用Save()方法。但是我希望Save()方法的实现根据调用应用程序的不同而不同。
我最初创建了一个名为IDataAdapter的接口,然后为每个IDataAdapter对象创建一个静态属性。然后,Save()方法检查是否已设置,然后将业务对象传递给它的Save()方法。
public interface IDataAdapter
{
void Save(BusinessProxy proxy);
}
public class BusinessProxy
{
public IDataAdapter myAdapter { get; set; }
public bool Save()
{
if (myAdapter == null)
throw new Exception();
myAdapter.Save(this);
}
}
当然,这是不理想的,因为表示层将需要具有以设定的适配器属性数据层的参考。我真的很喜欢有一些插件系统,我可以根据应用平台换出data.dll。
有没有人对如何实现这个更好一点有什么建议?