繁体   English   中英

如何在C#中的运行时更改持久层

[英]How to change persistence layer at runtime in C#

我正在进行一个新项目,我需要资深建筑师/设计模式专家的指导!

我的新项目需要具有多个持久层,以便客户端可以在运行时决定数据的存储位置,例如,内部SQL数据库,MS Exchange或Google存储。

功能本质上是相同的,只是每个的存储/实现都不同。

我在这里所寻找的并不是您如何做到这一点,它只是为了达到我的目的而使用的最佳模式的指针,同时仍会在将来提供灵活性,因为它们将不断变化。 我试图避免将不可避免地导致一些令人讨厌的代码气味的具体实现。

我知道在此过程中将涉及某种形式的DI,但是这里的任何指针将不胜感激。

您的案例确实没有什么特别的,因此,如果您遵循DI的标准做法并使用容器来简化诸如SimpleInjector类的任务即可完成任务。 对您来说,主要要点是不要依赖于具体的类,而应依赖于抽象,这就是DI容器将帮助您进行组织的地方。

例如,如果您打算保存用户,则可能有一些IUserRepository带有方法SaveUser 然后,您将实现SqlUserRepositoryGoogleStorageRepository等。其他任何数据访问层接口也是如此。 如果您只是这样做,则将需要以一种可以根据需要在运行时提供所需存储库的方式配置DI。 别忘了永远不要直接依赖GoogleStorageRepository等,而只依赖于公共接口。 我将为接口(以及DL将意识到的相应BI数据模型)创建一个项目,并为每个实现创建一个项目,并将其进一步分离。

存储库模式就是要在持久层和业务层之间建立隔离。

网络上的许多示例仅通过将其用作其数据实体的包装程序就错误地演示了它。 那是不对的。 存储库类/接口的设计应由业务需求驱动,而不应由第一个数据存储的外观决定。

因此,这是您使用案例的理想模式。 您可以从业务层的角度定义存储库接口,然后为每个数据存储(如MSSQL)创建一个实现。 我什至将该接口放在我的业务层中,以进一步证明这种观点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM