小编Emm*_*mel的帖子

Perl OO框架和程序设计 - Moose和Conway的由内而外的对象(Class :: Std)

这更像是一个用例类型的问题......但也足够通用,可以更广泛地应用:

简而言之,我正在研究一个或多或少是命令行包装器的模块; OO自然而然.没有太多细节(除非有人想要它们),系统没有疯狂的复杂程度,但在这个框架中有三到四个对象确实很自然.最后,它是一个开源的东西,我将放在那里,而不是一个模块与同一公司的一些开发人员一起工作.

首先,我使用Class :: Std实现了OO,因为Perl Best Practices(Conway,2005)为什么要使用由内到外的对象做出了很好的论据.完全控制访问哪些属性等等,适当的封装等.此外,他的设计非常简单和聪明.

我喜欢它,但后来注意到没有人真正使用它; 事实上,康威自己似乎不再推荐这个了吗?

所以我感动了每个人的最爱,穆斯.它很容易使用,虽然方式过度杀戮功能明智的我想做什么.主要的重大缺点是:它有一大堆模块依赖,迫使我的模块用户全部下载.一个小小的缺点是它的功能比我真正需要的更多.

有什么建议?不方便开发人员强迫他们使用可能过时的模块,或强迫模块的每个用户下载Moose及其所有依赖项?

对于适当的Perl OO框架是否有第三种选择,这种框架很受欢迎,但这两种框架都没有?

oop perl class moose

9
推荐指数
3
解决办法
2000
查看次数

Perl - 从超类(OO)调用子类构造函数

这可能会成为一个令人尴尬的愚蠢问题,但可能比创建令人尴尬的愚蠢代码更好.:-)这是一个OO设计问题,真的.

假设我有一个对象类'Foos',它代表一组动态配置元素,通过查询磁盘上的命令'mycrazyfoos -getconfig'获得.假设我想要'Foos'对象有两类行为:

  • 现有的:一个是我刚刚提到的命令输出中存在的查询(/ usr/bin/mycrazyfoos -getconfig`.通过shelling out命令对现有命令进行修改.

  • 创建不存在的新的; 新的'crazyfoos',使用一组复杂的/usr/bin/mycrazyfoos命令和参数.在这里,我不仅仅是查询,而是实际运行一堆system()命令.影响变化.

这是我的班级结构:

Foos.pm

包Foos,它有一个新的($ hashref - > {name =>'myfooname',)构造函数,它接受'crazyfoo NAME',然后查询该NAME的存在,看看它是否已经存在(通过炮轰并运行上面的mycrazyfoos命令).如果该crazyfoo已经存在,则返回一个Foos :: Existing对象.对此对象的任何更改都需要shelling out,运行命令并确认所有内容都运行正常.

如果这是要走的路,那么new()构造函数需要有一个测试来查看要使用的子类构造函数(如果在这种情况下甚至有意义).这是子类:

FOOS/Existing.pm

如上所述,这适用于Foos对象已存在的情况.

FOOS/Pending.pm

如果在上面,'crazyfoo NAME'实际上不存在,那么这个对象将被创建.在这种情况下,将检查上面的new()构造函数是否有其他参数,并且它将继续使用 - > create()使用system()调用shell并创建一个新对象...可能返回一个'现有的'一...

要么

当我输入时,我意识到这可能是最好有一个:

(另一种安排)

Foos类,有一个

- > new()只需要一个名字

- > create(),它接受额外的创建参数

- > delete(), - > change()和其他影响存在的参数; 必须动态检查.

所以我们这里有两个主要方向.我很好奇哪种方式更聪明.

oop perl constructor class subclass

8
推荐指数
1
解决办法
1530
查看次数

标签 统计

class ×2

oop ×2

perl ×2

constructor ×1

moose ×1

subclass ×1