我是一名普通的perl程序员.我对语言本身没有问题,但是使用" 好 "的对象设计.虽然我能够理解(大多数)CPAN模块,但没有严重的问题,我甚至无法设计自己的简单对象层次结构.
示例 - 现在面对一个非常简单的应用程序(Web和命令行界面):
commands.txt)和零个或多个图像JobRepository另一个目录)的位置JobRepository到全局渲染队列(再次,另一个目录)JobRepository/result目录在bash它是可行的少数" 不复杂 " bash脚本-但我想这样做在Perl(因为网络接口) -并希望实践Perlish的(麋鹿)对象设计...
这里开始我的问题.
尝试"视觉" 名词分析方法,并制作下一个图像.

发布图片,因为它"更短"为:
package Iren::JobRepo;
use Moose;
use warnings;
has 'Jobs' => (is => 'rw', isa=>ArrayRef[Iren::Job]);
…
method AddJob {
...
}
Run Code Online (Sandbox Code Playgroud)
等等
正如您所看到的,它非常简单 - 但是立即面临一些决策问题,例如:
$user->send_email-来我傻,因为我们发送电子邮件给用户,而不是用户本身...JobRepo->SendJobToRenderQueue或者我应该调用一些RenderQueue->addJob方法?IPC::DirQueue- (应该是RenderQueue的实现)正如你所看到的,没有角色,没有特征 - 没什么 - 它很简单...... - 但充满了问题:(
任何人都可以帮助清除混乱吗?什么应该是"好"的包层次结构?
所以,我真的迷失了,我开始对自己感到失望.其他问题(我知道,这些是基于意见的) - 但我必须问他们......
$cat->diets:)但是掌握了一些新东西 - 对我来说不好...抱歉,文字墙.我会很高兴得到任何指向好书或任何有帮助的东西......
东西@daxim没回答:
- 如何学习perl/Moose的好对象设计?(我可能永远不会使用其他语言)
- 搜索关于对象设计的谷歌(以及Stackoverflow)多次被引用为"四大甘地"一书(以及其他几本).但通常用于Java.值得为perl/Moose购买?或者在这里是perl/Moose的另一本好书?
- 如何检查正确的对象设计是一些很好的技术?
坦率地说,最好的检查方法是:(1)用第二双眼睛进行设计审查;(2)看看你的设计如何能够保持和重复使用.每次更新都不需要改变好设计.我不知道有任何具体的技术/程序方法需要检查.
一个好的经验法则是:如果您需要改变某些行为的方式,或许需要大幅改变,您需要更改多少代码?最好的设计是最小化变化的设计.
- 简单地说 - 你如何掌握你的对象层次/角色/特征等......?虽然我正在阅读这些例子 - 我理解$ cat-> diets :) - 但是掌握一些新东西 - 对我来说不好...
实践.理想情况下,找到教程/书籍解决的问题,首先解决自己,然后看看他们如何解决它.然后将您最好的组合解决方案发布到codereview.SE并询问是否可以改进:)
循环定义.用户有JobRepository,Repository有很多Jobs,但是Job有吗?用户?(需要知道属于谁的工作) - 等等..
不,你不需要知道这份工作属于谁.几周前我解释了为什么 - 我在这里提出并回答了一个非常类似的问题:使用Perl的OO设计模式.
简短版本:在实际代码中,您不太可能在没有用户的情况下开始工作 - 当您完成工作时,您很可能已经从已知用户开始并从该用户获得了作业存储库.您不再需要重新找到该用户.