2017-02-27 26 views
0

我正在着手一个新项目,我需要一些来自资深建筑师/设计模式大师的指导!如何在运行时改变持久层C#

我的新项目需要有一些持久层,由此客户可以在运行时该数据将被存储,例如决定,在房子的SQL数据库,MS Exchange或谷歌存储。

功能将基本相同,只是每个存储/实现将有所不同。

什么我不找这里是你怎么做,它只是一个指针的最佳模式,以使用为我的目的,同时还提供灵活的道路作为自己将改变。我试图避免具体的实现,这将不可避免地导致一些讨厌的代码气味。

我知道它会涉及一些类似的DI,但任何指针在这里将不胜感激。

回答

1

真的没有什么特别的,所以如果你遵循标准的做法与DI和使用容器来缓解你的任务,如SimpleInjector这将做的伎俩。你的主要观点应该是不依赖于具体的类,而是抽象的,这就是DI容器将帮助你组织这一点的地方。

E.g.如果您打算保存用户,则可能需要使用IUserRepository,方法SaveUser。然后你将实现SqlUserRepository,GoogleStorageRepository等。对于任何其他数据访问层接口也是如此。如果你这样做,你将需要配置你的DI,以便你可以根据你的需要在运行时提供所需的存储库。不要忘记永远不要直接依赖GoogleStorageRepository等,而只能在通用接口上使用。我将为每个实现创建一个接口项目(以及DL将知道的相应的BI数据模型)以及一个项目,以便进一步分离它。

1

存储库模式是关于创建持久层和业务层之间的分离。

在网络上的许多例子只是用它作为他们的数据实体的包装演示了不正确。这是不正确的。存储库类/接口的设计应该由业务需求驱动,而不是由第一个数据存储的外观如何驱动。

因此它是您的使用案例的完美模式。您可以从业务层角度定义存储库接口,然后为每个数据存储(如MSSQL)创建一个实现。我甚至将这个接口放在了我的业务层,以进一步展示这个视角。