【问题标题】:Where should I instantiate entities from database in a Three-tier app?在三层应用程序中,我应该在哪里实例化数据库中的实体?
【发布时间】:2013-05-09 17:12:11
【问题描述】:

我正在创建一个 3 层 应用程序,但遇到了问题。
我有一个数据库,其中包含有关客户的数据和一个代表我的应用程序中的客户实体的类。问题是,我不知道我是否应该在 数据层应用层 中实例化客户实体。

应用层 中创建客户实体似乎更正确,因为 数据层 应该只查询数据,但这意味着我需要使用应用层中的“原始/未格式化”数据,而且看起来也不好看。

有谁知道处理这个问题的“正确”方法吗?

【问题讨论】:

    标签: database oop 3-tier


    【解决方案1】:

    数据库保持状态,在可以查询之前必须保存状态。应用程序实例化一个新的客户实体,然后将其发送到持久性进行保存。当应用程序需要数据库中的某个客户时,持久性(通常是存储库)会恢复客户。

    请注意,客户是一个业务实体,与客户表或客户 ORM 实体相关但不相同,客户 ORM 实体只是从数据库的角度建模的用于查询优化的数据结构。

    【讨论】:

    • 所以你是说我应该在应用层中实例化一个客户,当它要被保存时,在数据层中当它从数据库中恢复时?
    • 我是说一个新客户在你需要的地方被实例化,99.99% 的时候你在应用层需要它,数据层只是保存/恢复实体。
    • 是的,但是当数据层恢复实体时,它会实例化它,不是吗?我的意思是在我的数据库连接类中,我将不得不写类似Customer c = new Customer(data); 的东西。或者我应该把那个代码放在 App 层,并使用我从 Data 层得到的数据,像这样Data d = dbConnector.getCustomerData(); Customer c = new Customer(d);
    • 不,在这种情况下,数据层实例化了客户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多