每当我看到关于得墨忒耳法的文章时,作者似乎都没有给出如何遵守这一法律的可靠实例.他们都解释了它是什么,并展示违法的例子,但这很容易.
可能有很多方法可以遵守这个法律(良好的设计和规划是一个),但用非常简单的术语来说,这是一种服从它的方法吗?
假设我有一个具有以下属性的类:
public class Band {
private Singer singer;
private Drummer drummer;
private Guitarist guitarist;
}
Run Code Online (Sandbox Code Playgroud)
我在程序的某个地方,我有一个这个Band
类的实例,我想要吉他手的名字,我通常看到的是:
guitaristName = band.getGuitarist().getName();
Run Code Online (Sandbox Code Playgroud)
那个看起来并不太糟糕,因为链条不会太深,但是得墨忒耳法则说可能应该这样做:
guitaristName = band.getGuitaristName();
Run Code Online (Sandbox Code Playgroud)
我的Band
班级有一个方法:
public String getGuitaristName() {
return guitarist.getName();
}
Run Code Online (Sandbox Code Playgroud)
这是你应该如何遵守法律?
谢谢.
我验证了模型层中的所有表单数据,但我也检查了表单的提交位置(HTTP Referrer),我还发送了一个带有表单的令牌,以帮助防止跨站点请求伪造,我的问题是这些检查应该在哪里完成?在控制器或模型层?
我想到了几种不同的方法来实现这一点,其中一种方法是在我AbstractController
的验证表格源和发布的令牌中使用某种受保护的方法,但这可能会破坏SRP.
在每天 10 小时以上学习领域驱动设计一周后,我开始感觉自己开始很好地理解它,直到我今天阅读了这篇文章:
http://blog.fedecarg.com/2009/03/15/domain-driven-design-the-repository/
那篇文章的作者说你将 Repository 注入到 Domain 对象中,这对我来说没有任何意义。
我不是这方面的专家,但我认为他是错误的,但我希望这里的一些人提供一些关于将存储库注入域对象是对还是错的意见。
上周我每天都在阅读另一篇文章和另一篇文章,他们对我来说听起来都一样(这是一件好事),直到我看到我上面发布的文章,如果我的这张照片让我三思而后行模式不正确。
您是否应该注入存储库?
我有一个DataMapperFactory
,我认为我做得正确,有一个但我有一个DomainObjectFactory
但是它似乎毫无意义.就是这个:
namespace libs\factories;
use models as Models;
class DomainObjectFactory {
public function build($name) {
$className = 'Models\\' . $name;
return new className();
}
}
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一优势是我保持new
运算符不会出现在我的代码中.
还有DomainObjectFactory
比这更多的权利吗?
任何帮助都会非常感谢.
在 MVC 应用程序中,很容易理解控制器如何从请求中提取数据并更新模型层,但我有点困惑,当视图不知道时视图应该如何从模型层检索数据要求?
例如,如果我去
http://www.site.com/product/view/428
Run Code Online (Sandbox Code Playgroud)
我路由 URL 并分派请求,最终到达控制器。控制器中不需要执行任何操作(我认为?),当它到达我的视图时,我需要产品 ID,但视图不应该从请求中提取数据,所以我该怎么办?
谢谢。
例:
file:\ bla\test1.php
class Test { public function Hello($one) { } }
file:\ bla2\test2.php
class World { public function GetNumberOfParameters($class, $method) { // output: number of parameters required of method Hello } }
我在Angular中遇到问题,我在控制器中声明了一个函数,并且希望指令能够调用此函数。我&
在指令范围内使用来引用父函数。
当第一个指令内部还有另一个指令,而内部指令也在控制器中引用此函数时,就会发生问题。
可以从第一个指令和第二个指令中调用该函数(如果该函数没有参数)。可以从第一个指令调用该函数,而不能从第二个指令调用(如果该函数具有参数)。
此plnkr展示了它的作用:
https://plnkr.co/edit/8E5oNvWcF0QQWL7pmxrD?p=preview
这是错误还是我错过了什么?