c# – 使用存储库模式抽象出数据库特定的id:s?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 使用存储库模式抽象出数据库特定的id:s?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1421字,纯文字阅读大概需要3分钟。
内容图文
![c# – 使用存储库模式抽象出数据库特定的id:s?](/upload/InfoBanner/zyjiaocheng/907/4598a906496a444692f67ceb0d11e4e8.jpg)
我正在学习DDD(域驱动设计)和存储库模式(在C#中).我希望能够使用存储库模式来持久化实体,而不关心实际使用哪个数据库(Oracle,MySQL,MongoDB,RavenDB等).但是,我不知道如何处理数据库特定的id:s大多数(所有?)数据库使用.例如,RavenDB要求它应存储的每个实体都具有string类型的id属性.其他可能需要int类型的id属性.由于不同的数据库对此进行了不同的处理,因此我无法将数据库ID作为实体类的一部分.但它必须存在于某个时刻,至少在我存储实际实体时.我的问题是关于这个问题的最佳做法是什么?
我目前追求的想法是,对于我想要支持的每个数据库,为每个业务对象类型实现特定于数据库的“值对象”.这些值对象将具有数据库特定的id属性,并且我将在读取和写入时在两者之间进行映射.这看起来是个好主意吗?
解决方法:
这是泄漏抽象的经典案例.您不可能在存储库接口下抽象出数据库的类型,除非您想要丢失每个数据库附带的所有好东西. ID类型(字符串,Guid或其他)的要求只是巨大冰山的最高峰,其大部分质量都在泥泞的水域之下.
考虑事务处理,并发性和其他东西.我理解你对持久性无知的看法.确保不依赖于域模型中的特定数据库技术是一件好事.但是你也无法摆脱对任何持久性技术的依赖.
使用任何RDBMS使您的域模型运行良好相对容易.其中大多数都有标准化的数据类型.使用像NHibernate这样的ORM会对你有很大的帮助.在NoSQL数据库中实现相同的功能要困难得多,因为它们往往差别很大(实际上非??常好).
所以我的建议是对你将要处理的可能的持久性技术集合进行一些研究,然后为持久性子系统选择适当的抽象级别.
如果这不适合您,请考虑事件采购.事件存储是最不需要的持久性技术之一.使用Jonathan Oliver的EventStore等库可以使用几乎任何存储技术,包括文件系统.
内容总结
以上是互联网集市为您收集整理的c# – 使用存储库模式抽象出数据库特定的id:s?全部内容,希望文章能够帮你解决c# – 使用存储库模式抽象出数据库特定的id:s?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。