我正在尝试寻找正确的解决方案以根据组成生成类代码。
通过上面的表示,并使用2个工具(MagicDraw和Enterprise Architect),为DateTimeOffset dateTime = DateTime.Now.ToFileTime();
var url= $"/PullAsync?since={datetime}&page={pageno}&count=10";
文件生成了2种不同的代码:
MagicDraw:
Person.h
企业架构师:
class Person
{
int age;
string fname;
Head haveHead;
string lname;
};
因此,在MagicDraw中,我有一个class Person
{
public:
Person();
virtual ~Person();
Head *m_Head;
private:
int age;
string fname;
string lname;
};
的类成员,但是在Enterprise Architect代码中,我有一个指针?
我知道Head
是Person对象的一部分,并且它的存在是由Person对象管理的。所以我猜MagicDraw生成的代码更合适。
我的问题是企业生成的代码是否正确?
如果两者都正确,哪一个是最好的?
答案 0 :(得分:2)
我不认为一个比另一个更好。通常,除非您将两件事进行比较,否则实际上没有答案,除非其中两件事比另一件事极端逊色,但是这里有两点需要注意。
Enterprise Architect将m_head
公开(我不希望每个人都可以利用我的头脑!)。除非您希望并需要将其公开(但是有比公开它更好的方法),否则这是不可取的。另外,它是一个指针,因此可以将一个头分配给多个人,但您可能需要它,如@coredump的注释中所建议,在运行时访问Head
的子类。此版本还可以自行执行内存管理。您需要在构建期间动态分配,然后自己清理。但是,如果Head
不能轻易移动,并且即使Head
由于某种奇怪的原因而不能移动,移动该版本的成本也会降低。
Magic Draw的版本将所有内容都设为私有,因此无法接近某人的头部。一头只属于一个人。内存是自动管理的。如果Head
不可移动,则移动会更昂贵,如果Head
不可移动,则无法移动。
您应该选择最适合自己的需求。
答案 1 :(得分:1)
至少在语义上,我认为MagicDraw的版本更正确。关键是在这种情况下,关系1 <-> 1
更加明确地声明,并且不能滥用。在另一种情况下,您可能会将多个Head
与特定的Person
相关联。