对于我为当前客户端制作的几个应用程序,我有共享用户帐户。这意味着一个应用程序中的每个帐户都应该存在于其他应用程序中 每个应用程序都有自己的一组设置 应用程序的数量和设置本身将是真正随时间变化的部分,因此我想将它们分开。
通过IRepository类(XMLRepository,SQLRepository等)访问数据存储。 它们抽象出实际的数据访问逻辑。 SettingsService类应该能够获得一个ISetting类,如下所示
public T GetSetting<T>(IUser user) where T : ISetting
由于ISettings类的字段对于每种类型都不同,我认为它是实际的Settings类,它应该知道如何填充它自己的字段,但它不知道如何获取值。
然而,存储库将知道如何访问数据,但它不知道将它们放在何处。
如果我没有误会,GetSetting实际上是一种工厂方法。我觉得这个问题不是新问题,可能有一个好的模式来解决这个问题。
我有什么选择?
答案 0 :(得分:0)
对于每种具体类型的ISetting,您都需要某种工厂,可以根据从存储库返回的数据创建具体的SomeSetting实例。
这样的工厂应该如何工作取决于您如何设想设置持久性架构。您是否为每种类型的ISetting都有自定义架构,或者您只是在BLOB / XML中序列化和反序列化设置?
在第一种情况下,您需要为每个设置架构设置一个自定义存储库。这是一种简单的方案,因为每个专用的存储库都只是作为自定义工厂。
在另一种情况下,您可以将元数据与BLOB一起保存,BLOB可以存储用于反序列化BLOB的自定义工厂,或者只是序列化BLOB的类型(然后您可以使用.NET的序列化API)序列化和反序列化对象。)