我正在开发一个系统,希望尽可能地解耦层级。我的目标是建立一种模块化应用,可以在不严重修改系统其余部分的情况下切换数据库等。因此,我一直在观看 Robert C. Martin 的有关良好实践、清晰代码、解耦架构等方面的演讲,以获取一些灵感。但他描述了系统 Fitnesse 和他们为 WikiPage 实现存储/加载方法的方式,让我感到有点奇怪。我也链接了相关视频:Robert C. Martin - Clean Architecture and Design 。
从我的理解来看,他所描述的是该实体知道如何从某个持久层存储和加载自身的机制。当他想要将 WikiPages 存储在内存中时,他只需重写 WikiPage 并创建一个新的 InMemoryWikiPage。当他想把它们存储在数据库中时,他也做了同样的事情...
因此,我有一个问题:这种方法叫什么?我一直在学习 Repository 模式等内容,了解为什么类应该具有持久性无关性,但我似乎找不到任何有关他所做的这件事的资料。因为我的应用程序将由模块组成,我认为这可能有助于解决我的问题,而无需创建一些实体集中存储的需要...每个模块只需关心自己,包括其实体的持久性。
我认为代码会像这样:
从我的理解来看,他所描述的是该实体知道如何从某个持久层存储和加载自身的机制。当他想要将 WikiPages 存储在内存中时,他只需重写 WikiPage 并创建一个新的 InMemoryWikiPage。当他想把它们存储在数据库中时,他也做了同样的事情...
因此,我有一个问题:这种方法叫什么?我一直在学习 Repository 模式等内容,了解为什么类应该具有持久性无关性,但我似乎找不到任何有关他所做的这件事的资料。因为我的应用程序将由模块组成,我认为这可能有助于解决我的问题,而无需创建一些实体集中存储的需要...每个模块只需关心自己,包括其实体的持久性。
我认为代码会像这样:
public class Person : IEntity
{
public int ID { get;set; }
public string Name { get;set; }
public void Save()
{
..
}
public void Update()
{
}
public void Delete()
{
}
...
}
听起来有点奇怪,但是…或者我误解了他在视频中说的话?
我的第二个问题是,如果你不同意这种方法,在这样的模块化应用中,你会选择什么路径?
如果可能的话,请提供一个例子并加以解释。