|
|
1
8
是的。 如果您想遵循SRP,则将控制器分解为调度程序和动作;调度程序将控件调度到其动作,并在编译时(C++模板)或运行时(Java XML,无论什么),编写调度程序和操作。 为什么我们不经常看到这个?因为控制器通常是“特别”实现,所以叶级的具体类不是泛化的,也不应该是子类。在这里,类更方便地用于分组代码,操作几乎肯定是非公共的(可能是私有的,可能是受保护的),“仅仅”是内部实现细节。 如何决定要发送到哪个操作、可能操作的数量和多样性的选择是很高的,并且发送和操作是紧密耦合的。所以在实践中,把代码放在一个地方通常比较容易。 |
|
|
2
4
不,没有。 mvc模式及其变化没有任何内在的东西会导致违反单一责任原则。控制器的实现是否违反srp取决于封装的行为是否有不止一个更改的原因(就像任何其他类一样),而不是因为对模式的任何预设的规定性使用。 您给出的示例是数据应用程序上基本表单的子集,其中控制器仅为给定模型提供CRUD操作。crud操作在本质上是相当内聚的,因此这通常不构成对srp的违反。在一个控制器上有多个方法开始变得可疑的地方是当这些方法表示域中不同的行为交互时。 也就是说,即使有人认为crud代表了四个独立的非内聚性关注点,mvc模式也没有什么内在的东西迫使您在同一个控制器中促进这些操作。 关于mvc模式的一些历史,以及它在web开发、检查中的应用 Interactive Application Architecture Patterns . |