小编uni*_*ptr的帖子

如何在 C++ 中计算对象的哈希/校验和/指纹?

如何在 C++ 中计算对象的哈希/校验和/指纹?

要求:

函数必须是'内射'(*)。换句话说,不应该有两个不同的输入对象,它们返回相同的哈希/校验和/指纹。

背景:

我试图提出一个简单的模式来检查实体对象自构建以来是否已更改。(为了知道数据库中哪些对象需要更新)。

请注意,我特别不想在我的 setter 或其他任何地方将对象标记为已更改。

我正在考虑以下模式:简而言之,每个应该持久化的实体对象都有一个成员函数“bool is_changed()”。在此上下文中,已更改意味着自调用对象的构造函数以来已更改。

注意:我做这一切的动机是避免将对象标记为干净/脏或进行成员与成员比较的样板代码。换句话说,降低人为错误的风险。

(警告:前面的 psudo c++ 代码。我还没有尝试编译它)。

class Foo {
private:

    std::string my_string;

    // Assume the "fingerprint" is of type long.
    long original_fingerprint;

    long current_fingerprint()
    {
        // *** Suggestions on which algorithm to use here? ***
    }
public:
    Foo(const std::string& my_string) :
        my_string(my_string)
    {
        original_fingerprint = current_fingerprint();
    }

    bool is_changed() const 
    {
        // If new calculation of fingerprint is different from the one
        // calculated in the constructor, then the …
Run Code Online (Sandbox Code Playgroud)

c++ hash orm checksum

5
推荐指数
1
解决办法
2831
查看次数

清洁建筑中的实体是否应该了解持久性机制?

在《清洁建筑》(Robert C. Martin)一书中。191,他指出“实体是纯粹的业务逻辑,别无其他”。我不确定我应该如何从持久性机制的实体知识方面解释这一说法。

我假设实体对象是有状态的-它们操纵了它们代表的业务数据。如果是这样,则必须通知持久层该数据的更改,以便它可以保留这些更改。因此; 实体是否可以保留对持久性接口(或工作单元接口,如果设计更为精细的话)的引用?

我倾向于认为,拥有这样一个引用(并从实体内部调用)的实体对象将不是“纯业务规则”。但我有一种感觉,只要实体持有对接口的引用,它就不算数吗?

而且,如果实体不应保留对持久性机制的引用,那么是否存在其他用于持久化业务数据更改的良好模式?

architecture design-patterns unit-of-work clean-architecture

5
推荐指数
1
解决办法
1056
查看次数