我是一名普通的perl程序员。我对语言本身没有问题,但是用“好”对象设计。虽然我能理解(大部分)CPAN模块,但没有严重的问题,我甚至无法设计自己的简单对象层次结构。Perl/Moose OO设计,包层次结构
实例 - 现在面临的一个非常简单的应用程序(Web和命令行界面):
- 已认证的学生上传了一个zip文件(什么包含渲染作业)
- 解压缩文件和新的目录,并检查它的内容(应包含exatly一个文件
commands.txt
)和零个或多个图像 - 如果内容为确定 - 移动到地方叫目录:
JobRepository
(另一个目录) - 如果用户决定运行渲染作业 - 从他自己的
JobRepository
发送工作全局渲染队列(再次,另一个目录) - 另一个进程从队列(FIFO - 设计与IPC::DirQueue)主罚工作和执行渲染过程
- 完成后,把结果到用户
JobRepository/result
目录 - 发送电子邮件给用户
- 学生可以下载压缩结果
在bash
它是可行的少“不复杂“bash脚本 - 但我想这样做在Perl(因为网络接口) - 并希望实践Perlish的(麋鹿)对象设计...
在这里开始我的问题。
试过“视觉”名词解析方法并制作下一张图片。
发布的图像,因为它是 “短” 为:
package Iren::JobRepo;
use Moose;
use warnings;
has 'Jobs' => (is => 'rw', isa=>ArrayRef[Iren::Job]);
…
method AddJob {
...
}
等
正如你所看到的,这是非常简单的 - 但immediatelly面临一些决定问题,例如:
- 什么对象应该执行unzip/zip/checkJob方法?它属于:JobRepository的作业“拉链”本身?
- 什么对象应该发送电子邮件给用户?
$user->send_email
- 来我愚蠢,因为我们发送电子邮件给用户,而不是用户本身... - “谁”应该从用户的JobRepo发送作业到RenderQueue?
JobRepo->SendJobToRenderQueue
或我应该拨打RenderQueue->addJob
方法? - 什么对象应该应该使用ISA
IPC::DirQueue
- (应该是RenderQueue的implememtation) - 循环定义。 用户已有 JobRepository,存储库有很多Jobs,但Job 有?用户? (要知道向谁属于工作) - 等..
正如你所看到的,没有角色,在这里没有性状 - 什么 - 这是简单的... - 但充满问题:(
任何人都可以帮助清除混乱?什么应该是“好”包层次?
所以,我真的迷路了,我开始失望自己。但我必须问他们...
- 如何学习perl/Moose的好对象设计? (我可能永远不会使用另一种语言)
- 搜索谷歌关于对象设计(和Stackoverflow太多)被引用了“Gand of Four”书(和其他几个)。但通常用于Java。 perl/Moose是值得购买的吗?或者,这里还有一些perl/Moose的好书吗?
- 是一些很好的技巧,如何检查正确的对象设计?
- 来自UML的代码生成器可能不存在为穆斯 - 或者在这里的东西可用和推荐?
- 简单 - 你如何掌握你的对象层次结构/角色/特征等...?虽然我正在阅读的例子 - 我明白
$cat->diets
:) - 但掌握新的东西 - 对我不利...
对不起,对文本的墙。我会很高兴得到任何指向好书或任何什么有什么帮助...
+1为做好准备工作,并希望我可以给第二个+1关心好的对象设计。 – DVK