得墨忒耳法则规定,物体应该只知道"密切相关"的其他物体(我的解释).请参阅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法的一致性,同时允许您根据自然"属于"相关聚合的属性查询聚合.
这种方法是推荐的吗?
使用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) 添加以下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) 我知道 PostgreSQL 9 允许使用该COPY (SELECT ...) ...语法,但我需要一个与 PostgreSQL 7 兼容的解决方案。
例如,COPY TO命令是按照写入表的顺序输出数据,还是使用特定的索引(或主键)?
鉴于对相关问题(/sf/answers/1546047471/)的以下答案是在以Windows为目标的Delphi应用程序中计算的对象引用?
即:
Q1A在第二个语句后执行以下对象的引用计数为2?
o1 := TMyObject.Create;
o2 := o1;
Run Code Online (Sandbox Code Playgroud)
Q1B从上面继,将分配o1到nil的引用计数下降到1?
o1 := nil;
Run Code Online (Sandbox Code Playgroud)
Q1C后再次上,将分配o2到nil的引用计数下降到0?
o2 := nil;
Run Code Online (Sandbox Code Playgroud)
Q1D向前移动,如果以上是正确的并且对象现在的引用计数为0,我理解编译器不会自动释放对象(o2.Free应该在o2 := nil上面调用之前为了防止内存泄漏).请记住,我说的是Windows目标,而不是具有自动引用计数(ARC)的移动目标.
Q1E如果引用计数没有自动释放与对象关联的内存,那么Delphi中的引用计数究竟是什么(例如,它是否有助于跟踪内存泄漏)?
我正在设计一种简单的文件格式,我正在考虑支持 UTF8,而不是仅支持扩展的 US ASCII。
换行字节(十六进制 0x0A)是分隔符之一。这个字节序列是否可以嵌入到多字节UTF8序列中?例如,其中初始字节之一具有高位设置(表示多字节字符),而尾随字节之一是 0x0A?
c++ ×2
cqrs ×2
delphi ×2
c ×1
copy ×1
file-format ×1
idempotent ×1
logging ×1
memory ×1
postgresql ×1
sql ×1
unicode ×1
windows ×1