我在选择,当你说你想要一个鞋店和一个宠物店你建议它可以扩展超过两种类型?
如果它明确地只是两种或三种不同的类型,我会去每个模块的不同服务的路由。然后明确处理不同的数据集。
如果您可以有n个不同的商店类型,您可能需要阅读所谓的'元模型'。这是您实际为数据库中的另一个模型类型建模的位置。通过这种方式,您可以拥有各种不同的产品,但是在数据库中,您可以表示它们具有基于产品的不同属性。
举一个具体的例子,设想一个内容管理系统。通常人们可以为不同的页面类型定义不同的字段。例如,一个'博客文章'有一个标题,正文,作者和一个'通用页面',只有正文和作者。您可以为每个页面类型创建一个表格,也可以尝试在数据库中描述一个页面,这样当人们想要引入新类型时,他们可以在不更新数据库模式的情况下进行操作。
关于福利的一个流程是,您的更广义的模型不关心ShoeShop或PetShop,它只是知道它获得一个商店,然后根据Shop对象上描述的内容计算出属性。一旦发生这种情况,在您的场景中,您只需要一个支持Shop的DataService和一个DbContext。
想象一下像Shop这样的模型,有一个Fields集合,每个领域都有像'Value','Type'等属性。它可以是一个思维弯曲者,它可以是非常抽象的处理,所以你将会想出一个原型来看看你是否舒适 - 如果你最终选择了几种类型的商店,那么这些挑战可能会轻而易举地超过收益。
另一个需要注意的问题是,构建一个足以描述所有事物的元模型是一个挑战。它也可以让某些ORM变得更好,因为它们需要复杂的热切加载功能,以确保在元模型中不会出现可怕的性能加载(我知道是因为我们构建了一个ORM for .NET developers called LightSpeed,我们做的第一件事情之一是快速带有它的元模型,并调整热切的加载功能,以确保我们确实做出了出色的查询)。
我已经有一个快速的谷歌,但还没有发现任何真正容易遵循开发元模型驱动的应用程序的指南。
这就是我的回应 - 你会想做更多的阅读,其他人可能有更好的主意,但总的来说,它会降低灵活性和复杂性之间的折衷。
我希望有帮助。
感谢您的回复!我有大约5或6种不同的场景。我将定义更多的内容,但从目前为止我阅读的内容来看,它变得非常复杂 - 所以我不确定是否值得所有麻烦。我正在考虑一个带有独立上下文的RiaServiceClassLibraries的解决方案。但是我必须检查这个库上下文中的实体是否有办法从另一个上下文中的实体继承。 – LueTm