Axapta 静态新建和继承
建议将新方法设置为受保护,并使用静态新建。。。减轻方法重载不足的方法。Axapta 静态新建和继承,axapta,x++,Axapta,X++,建议将新方法设置为受保护,并使用静态新建。。。减轻方法重载不足的方法。 所以我使用这个模式,正如前面解释的 但是静态方法不是继承的。 所以我们必须为每个子类定义静态构造和静态新。。。方法。 因此,我们失去了一些继承的好处 我查看了系统类,希望找到更好的解决方案,但我看到的并没有真正帮助我: -有些人尊重静态新模式,并在子类中声明方法 -有些人只使用新实例而不保护它 -有些人将母类用作“类工厂”,如SalesFormLetter static SalesFormLetter construct(
所以我使用这个模式,正如前面解释的 但是静态方法不是继承的。 所以我们必须为每个子类定义静态构造和静态新。。。方法。
因此,我们失去了一些继承的好处 我查看了系统类,希望找到更好的解决方案,但我看到的并没有真正帮助我:
-有些人尊重静态新模式,并在子类中声明方法
-有些人只使用新实例而不保护它
-有些人将母类用作“类工厂”,如SalesFormLetter
static SalesFormLetter construct(DocumentStatus document,
boolean getParmId = true)
{
switch(document)
{
case DocumentStatus::Confirmation : return new SalesFormLetter_Confirm (getParmId);
case DocumentStatus::PickingList : return SalesFormLetter_PickingList::construct(getParmId);
case DocumentStatus::PackingSlip : return new SalesFormLetter_PackingSlip (getParmId);
case DocumentStatus::ProjectPackingSlip : return new SalesFormLetter_PackingSlipProject(getParmId);
case DocumentStatus::Invoice : return new SalesFormLetter_Invoice (getParmId);
case DocumentStatus::ProjectInvoice : return new SalesFormLetter_InvoiceProject (getParmId);
default : throw error(strfmt("@SYS19306",funcname()));
}
throw error(strfmt("@SYS19306",funcname()));
}
因此,我想知道是否有更好的解决方案,如果没有,那么其中最好的是什么?更好的对象构造解决方案 嗯,
新的
必须去某个地方,在客户机代码中加入大量的新的
是脆弱和不灵活的。因此,请使用“工厂”类,尤其是相关类
两种选择:
成为新的
受保护。为每个子类创建一个构造,将工厂构造放在基类中,调用子类构造函数。但是任何人都可以调用子类构造方法新建
公开。不要为每个子类创建一个构造,将该构造放在基类中,新建子类。无法保护新类,因为基类不是从子类派生的new
的参数明确对象依赖关系。这将使您的工厂复杂化,但这是可以的,因为它将复杂性从您的客户机代码移开。Setter方法(parm
methods)是邪恶的,但是RunBase
需要它,因为批处理系统需要它
也去看看写了什么。谢谢你的回答。我想我需要一些时间来完全理解它并付诸实践。