Oop 反模式的名称是什么!string.IsnullOrEmpty(Employee.Name),(解除封装?)
我经常遇到这样的代码,即应该在业务对象中的逻辑到处重复:Oop 反模式的名称是什么!string.IsnullOrEmpty(Employee.Name),(解除封装?),oop,design-patterns,code-standards,Oop,Design Patterns,Code Standards,我经常遇到这样的代码,即应该在业务对象中的逻辑到处重复: if ( !string.IsNullOrEmpty( Employee.Name ) ) Display( Employee.Name ); 应该是这样的: if ( Employee.IsNameSpecified ) Display( Employee.Name ); 并且Employee.isnamesspecified具有指定值的逻辑 这只是一个例子,其他许多例子与OOP相反,OOP是用于对业务对象做出逻辑决策的过程代码 当
if ( !string.IsNullOrEmpty( Employee.Name ) ) Display( Employee.Name );
应该是这样的:
if ( Employee.IsNameSpecified ) Display( Employee.Name );
并且Employee.isnamesspecified
具有指定值的逻辑
这只是一个例子,其他许多例子与OOP相反,OOP是用于对业务对象做出逻辑决策的过程代码
当逻辑被封装在BusinessObject中时,它只是普通的OOP实践(或者具有不同名称的DOEA),相反的名称是什么?脱封?你可以把它看作是(告诉,不要问)的一种味道 这里要做的是:客户机代码检索另一个类拥有的“属性”,然后根据该值做出决定 TDA确切地暗示了您的问题是关于什么的:其他类应该为您做出该决定——您的客户机代码不应该知道做出该决定的规则 但请注意这里的“递归”:提议的“解决方案”仍然违反TDA。您仍然在从另一个类获取一个值,以便客户机代码可以对此作出决定 唯一的区别是:在第一种情况下,获取一个字符串,客户端检查该字符串是否为null/空;在第二种情况下,获取一个布尔值,它告诉您该做什么 因此,“理想的”OO解决方案更像:
employee.display();
而员工完全靠自己做正确的事情。但是可以肯定的是,这个实现很快就会变成对SRP的违反——例如,Employee类真的应该知道“显示”自己吗 您的示例不是反模式(并且违反了MVC模式):
模型的作用是仅构造信息。我从来没有听说过它的名字。我只是说它“违反了封装”或“违反了关注点的分离”。你可以称它为“意大利面代码”或“copypasta”。@4castle:copypasta是新的!以前从没听说过,谢谢!是否应在该业务对象的ViewModel中显示?valod显示值的规则可以集中,我想这取决于实际的上下文。如果您的业务对象有一个视图模型,那么可能是的。我认为附加的问题实际上取决于您的总体设计和模型。我真的很喜欢“您的模型的作用只是构造信息,而不是显示自己”非常有洞察力,谢谢