我正在研究一个项目,我正在试图从一个持久模式转移到另一个模式。持久性设计模式
我看着在模式企业应用架构的,设计模式,并在这里this MSDN文章寻求帮助。我们目前的模式是MSDN文章中描述的活动记录模式。作为迈向更多模块化代码库的第一步,我们试图将我们的一些业务对象(又名表)分解为多个接口。
因此,举例来说,假设我有一个商店应用程序是这样的:
public interface IContactInfo
{
...
}
public interface IBillingContactInfo: IContactInfo
{
...
}
public interface IShippingContactInfo: IContactInfo
{
...
}
public class Customer: IBillingContactInfo, IShippingContactInfo
{
#region IBillingContactInfo Implementation
...
#endregion
#region IShippingContactInfo Implementation
...
#endregion
public void Load(int customerID);
public void Save();
}
Customer类代表了我们的客户表中的一行。即使Customer类是一行,它实际上也实现了两个不同的接口:IBillingContactInfo,IShippingContactInfo。
从历史上看,我们没有那两个接口,我们只是在整个Customer对象周围传递这些接口,然后做出我们想要的任何更改并将其保存。
这里是问题出现的地方。现在我们有了这两个接口,我们可能有一个控件需要一个IContactInfo,将其显示给用户,并允许用户在错误的情况下进行纠正。目前我们的IContactInfo接口没有实现任何Save()以允许对其进行修改。
有关良好设计模式的任何建议,以避免此限制而无需完全切换到其他众所周知的解决方案?我真的不想通过并为我的所有接口添加Save()方法,但它可能是我最终需要做的。
也许我错过了这个观点..但是你不能只在'IContactInfo'接口中包含'Load'和'Save'方法吗? –
如果控件需要Save()的能力,为什么要采用IContactInfo?如果可能创建一个实现IContactInfo的SavableContactInfo类型,然后让该控件获取一个SavableContactInfo对象? – itsme86
@SimonWhitehead我可以包含一个Load和Save,但有近100个表格,我们可能会将这些表格分解到接口中,以便确保在开始沿着这条路线前,我不会错过更明显和更好的战斗测试。 –