小编mag*_*nus的帖子

聚合根数据重复和Demeter定律

得墨忒耳法则规定,物体应该只知道"密切相关"的其他物体(我的解释).请参阅https://en.wikipedia.org/wiki/Law_of_Demeter.

以下示例不遵循LoD:

// This class has to be aware of too many other classes, increasing complexity.
class Thing {
    void foo(Customer c, Employee e, System s, Company c, SupportTicket st) {
        // Th
    }
}

// This function likewise has to be aware of too many other classes.
void foo(SupportTicket st) {
    st.employee().division().incrementResolutionCount();
}
Run Code Online (Sandbox Code Playgroud)

我正在研究一个在数据之间有很多复杂关系的系统.在SQL数据库中,使用四个不同的连接执行查询以获取我想要的数据很容易.但是,在这种情况下,您正在加载基于它实际上不包含的属性的聚合.如果Repository是内存中集合的抽象(即,在最简单的用例中围绕数组的包装),那么纯粹的内存中集合就不可能执行这样的查询,因为没有聚合将匹配它.

我想到的解决方案是你在聚合之间复制数据,而不仅仅是在有界上下文之间(http://www.infoq.com/news/2014/11/sharing-data-bounded-contexts).这增加了对Demeter法的一致性,同时允许您根据自然"属于"相关聚合的属性查询聚合.

这种方法是推荐的吗?

domain-driven-design law-of-demeter aggregateroot cqrs

3
推荐指数
1
解决办法
474
查看次数

使用事件源时,使用聚合版本号是幂等的

使用DDD,CQRS和事件源时,可能会重新发送消息或无序发送消息.

我不太关心命令消息,因为用户会立即知道它是否成功.我关心的是事件.如果将聚合版本号附加到事件中,我们是否可以使操作具有幂等性?例如:

class Person {
    public function apply(PersonNameUpdated event) {
        if (version_ + 1 != event.version) {
            name_ = event.name;
            ++version_;
        }
    }
    private String name_;
    private Integer version_;
}
Run Code Online (Sandbox Code Playgroud)

domain-driven-design idempotent cqrs event-sourcing

2
推荐指数
1
解决办法
973
查看次数

使用Delphi的数据类型错位?

添加以下Delphi函数后,我收到有关数据类型错位的错误: Project ... faulted with message: 'datatype misalignment at 0x77a7d7d8'. Process Stopped. Use Step or Run to continue.

我添加的功能如下.请注意,虽然只有时间戳实际写入文件,但该函数实际上已成功完成.

procedure Log(msg : String);
var
  tempFolderChars : array [0..MAX_PATH] of Char;
  tempFolder : string;
  logFile : TextFile;
  dt : TDateTime;
begin
  GetTempPath(SizeOf(tempFolderChars), tempFolderChars);
  tempFolder := IncludeTrailingPathDelimiter(String(tempFolderChars));
  dt := Now();

  AssignFile(logFile, tempFolder + 'GenericHolding.txt');
  if FileExists(tempFolder + 'GenericHolding.txt') then
    Append(logFile)
  else
    ReWrite(logFile);

  Write(logFile, FormatDateTime('yyyy-mm-dd hh:nn:ss ', now));
  Write(logFile, msg);
  Write(logFile, #13, #10);
  CloseFile(logFile);
end;
Run Code Online (Sandbox Code Playgroud)

编辑:添加了更多的组装输出.

ntdll.NtQueryInformationProcess:
77BAFAC8 B816000000       mov eax,$00000016
77BAFACD …
Run Code Online (Sandbox Code Playgroud)

memory delphi logging

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

PostgreSQL `COPY TO` 命令是否(或可以)保证特定的行顺序?

我知道 PostgreSQL 9 允许使用该COPY (SELECT ...) ...语法,但我需要一个与 PostgreSQL 7 兼容的解决方案。

例如,COPY TO命令是按照写入表的顺序输出数据,还是使用特定的索引(或主键)?

sql postgresql copy export-to-csv

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

在Windows目标Delphi应用程序中是否引用了对象引用,如果是,它的目的是什么?

鉴于对相关问题(/sf/answers/1546047471/)的以下答案是在以Windows为目标的Delphi应用程序中计算的对象引用?

即:

Q1A在第二个语句后执行以下对象的引用计数为2?

o1 := TMyObject.Create;
o2 := o1;
Run Code Online (Sandbox Code Playgroud)

Q1B从上面继,将分配o1nil的引用计数下降到1?

o1 := nil;
Run Code Online (Sandbox Code Playgroud)

Q1C后再次上,将分配o2nil的引用计数下降到0?

o2 := nil;
Run Code Online (Sandbox Code Playgroud)

Q1D向前移动,如果以上是正确的并且对象现在的引用计数为0,我理解编译器不会自动释放对象(o2.Free应该在o2 := nil上面调用之前为了防止内存泄漏).请记住,我说的是Windows目标,而不是具有自动引用计数(ARC)的移动目标.

Q1E如果引用计数没有自动释放与对象关联的内存,那么Delphi中的引用计数究竟是什么(例如,它是否有助于跟踪内存泄漏)?

c++ windows delphi

0
推荐指数
1
解决办法
251
查看次数

换行符(十六进制 0x0A)可以合法地嵌入到 UTF8 中吗?

我正在设计一种简单的文件格式,我正在考虑支持 UTF8,而不是仅支持扩展的 US ASCII。

换行字节(十六进制 0x0A)是分隔符之一。这个字节序列是否可以嵌入到多字节UTF8序列中?例如,其中初始字节之一具有高位设置(表示多字节字符),而尾随字节之一是 0x0A?

c c++ unicode file-format

0
推荐指数
1
解决办法
554
查看次数