Car# methods related to suburban driving ->foo1 ->foo2# methods related city driving ->bar3 ->bar4
现在让我们说我想添加“越野驾驶”作为我的汽车对象可以支持的案例之一.如果我向Car对象添加方法,是不是让它更像blob?
Car (augmented)# methods related to suburban driving ->foo1 ->foo2# methods related city driving ->bar3 ->bar4# methods related off road driving ->blah5 ->blah6
我是不是该:
答:汽车的子类.我可以制作一个OffRoadCar扩展Car对象.但是如果Car和OffRoadCar共享相同的数据/状态,并且只是方法不同呢? OffRoadCar只比汽车更具体“行动”,但不再具体描述,也没有独特的领域.因此实例化OffRoadCar毫无意义.
OffRoadCar extends Car# methods related off road driving ->blah5 ->blah6
B:使用静态方法消耗汽车.喜欢OffRoadAdventure-> Embark(Car).所以OffRoadAdventure类接受一个Car对象并使用它.
在C#中,这将被称为扩展方法.
我想换另一种方式是什么是Blob反模式的解决方案?是子类吗?是扩展方法吗?
另外,我想要解决这些方法的另一个原因是,如果它们的实现会产生一些成本,比如包含其他类/包?我不希望核心类的用户经常为他们永远不会使用的东西买单.我认为让少数人明白成本对大多数人来说是值得的.它使依赖图更精确(而不是像blob一样).
PS – 实现语言是Perl.
解决方法 使用Perl,你应该好好看看Moose和角色.package Suburban;use Moose::Role;requires 'wheels';sub 'foo1' { ...}sub 'foo2' { ...}package City;use Moose::Role;requires 'wheels';sub 'bar3' { ...}sub 'bar4' { ...}package Offroad;use Moose::Role;requires 'wheels';sub 'blah5' { ...}sub 'blah6' { ...}package ultraCar;use Moose;with qw/ Offroad City Suburban /;has 'wheels' => ( is => 'rw',isa => 'Int',default => 4 );package RentalCar;use Moose;with qw/ City Suburban /;has 'wheels' => ( is => 'rw',default => 4 );package Tricycle;use Moose;with qw/ Offroad /;has 'wheels' => ( is => 'rw',default => 3 );
您甚至可以在运行时添加和删除角色.
总结以上是内存溢出为你收集整理的perl – 新方法在哪里?全部内容,希望文章能够帮你解决perl – 新方法在哪里?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)