是否有容纳业务实体的容器的名称/模式?

时间:2016-02-24 11:27:47

标签: python design-patterns architecture

我发现自己经常实现一个类,作为我的业务实体的美化容器。通常我只是用“模型”作为该类的后缀,这非常具有描述性和广泛性。

一个例子(python):

class MyBusinessEntity:
    pass

class MyBusinessEntityModel:
    def __init__(self):
        self.entities = []

    def create_entity(self):
        self.entities.append(MyBusinessEntity())

    # Implement the rest of the CRUD operations

此类将充当我的主数据存储库,并且很可能使用某种数据访问对象进行持久存储。

这类课程有名字吗?我遇到了Repository Pattern,但我不知道这是不是我要找的东西。

1 个答案:

答案 0 :(得分:1)

您是对的,这基本上是Repository Pattern的内存实现。通常,应用程序服务(实现您的用例)将使用它来检索业务对象和与他们做点什么。

存储库的类型

存储库的两个主要版本是集合样式存储库命令样式存储库。前者尝试尽可能接近地模拟内存中的集合,而后者具有基于命令的接口。主要区别在于更新:命令样式存储库具有明确的update方法。

用法

让我们坚持使用此示例的命令样式存储库。通过这样的示例,读用例通常看起来像这样(伪代码):

books = bookRepository.findByAuthor(theAuthor)
ui.show(books)

创建调用可能看起来像

book = new Book(author, isbn, ...)
bookRepository.create(book)

更新通话看起来像

book = bookRepository.getById(bookId)
book.Author = newAuthor
bookRepository.update(book)

有关您的实施的说明

您的代码示例有点奇怪的是您的存储库自己实例化业务对象。 这不是存储库的责任。

相反,应用程序服务会创建一个,并在create调用中将其传递给存储库。因此,存储库上的create通常并不意味着“创建业务对象”,而是“将此对象添加到数据存储”。如果是内存存储库,这只是意味着将对象添加到内部集合中。