示例 – 现在面对一个非常简单的应用程序(Web和命令行界面):
>已验证的学生上传一个zip文件(包含一个渲染作业)
>将文件解压缩到新目录并检查它的内容(应该包含一个文件命令.txt)和零个或多个图像
>如果内容OK – 将目录移动到位置:JobRepository(另一个目录)
>如果用户决定运行渲染作业 – 将作业从他自己的JobRepository发送到全局渲染队列(再次是另一个目录)
>另一个进程从队列中获取作业(fifo – 使用IPC::DirQueue设计)并执行渲染过程
>完成后,将结果放入用户JobRepository / result目录中
>发送电子邮件给用户
>学生可以下载压缩结果
在bash中,可以使用很少的“不复杂”的bash脚本 – 但是我想在Perl(因为web界面)中进行操作 – 并且想要实践(Moose)对象设计…
这里开始我的问题.
尝试了“视觉”名词分析方法,并做出下一个图像.
发布图像,因为它是“更短”为:
package Iren::JobRepo; use Moose; use warnings; has 'Jobs' => (is => 'rw',isa=>ArrayRef[Iren::Job]); … method AddJob { ... }
等等
正如你所看到的,它真的很简单 – 但是立即面临一些决策问题,例如:
>什么对象应该做unzip / zip / checkJob方法?它属于:JobRepository在作业“拉链”本身?
>哪些对象应该向用户发送电子邮件? $user-> send_email – 我很傻,因为我们发送电子邮件给用户,而不是用户本身…
>“谁”应该将Job从用户的JobRepo发送到RenderQueue? JobRepo> SendJobToRenderQueue或者我应该调用一些RenderQueue-> addJob方法?
>什么对象应该使用ISA IPC :: DirQueue – (应该是RenderQueue的实现)
>循环定义.用户有JobRepository,存储库有很多Jobs,但Job有?一个用户? (需要知道谁属于工作) – 等等..
正如你可以看到的,没有角色,没有特点在这里 – 没有 – 它很简单… – 但充满了问题:(
有人可以帮忙清理混乱吗?什么应该是“好”的包层次结构?
所以,我真的很迷失,我已经开始失望了.其他问题(我知道,这些是基于意见) – 但我必须问他们…
>如何学习Perl / Moose的良好对象设计? (我可能永远不会使用另一种语言)
>搜索google关于对象设计(和Stackoverflow)也多次引用了“Gand of Four”书(还有其他几本).但通常用于Java.值得买perl /麋?还是在这里另外一本好书给perl / moose?
>是一些很好的技术,如何检查正确的对象设计?
>来自UML的代码生成器可能不存在于Moose – 或者这里有可用的和推荐的?
>简单 – 你如何掌握对象层次结构/角色/特征等?当我正在阅读这些例子 – 我明白了$cat-> diets