Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 设计模式的混合是一种糟糕的做法吗?_Php_Laravel_Design Patterns_Model View Controller - Fatal编程技术网

Php 设计模式的混合是一种糟糕的做法吗?

Php 设计模式的混合是一种糟糕的做法吗?,php,laravel,design-patterns,model-view-controller,Php,Laravel,Design Patterns,Model View Controller,我对设计模式的经验和理解来自与Laravel的合作,因此我实际上只对MVC设计模式有经验,但我发现我自己为每个CRUD操作开发了一种自动编译视图,例如,我通常在模型中放置某种数组来描述我希望如何为模型本身生成视图,然后我编写一个通用视图,读取模型属性,并根据数组生成所需的字段,如: class User extends Model{ public $editFormArray=array(["name","text",20],

我对设计模式的经验和理解来自与Laravel的合作,因此我实际上只对MVC设计模式有经验,但我发现我自己为每个CRUD操作开发了一种自动编译视图,例如,我通常在模型中放置某种数组来描述我希望如何为模型本身生成视图,然后我编写一个通用视图,读取模型属性,并根据数组生成所需的字段,如:

class User extends Model{
    public $editFormArray=array(["name","text",20],
                                ["surname","text",30]);
    [...]
}
@foreach($resource->editFormArrayas $currForm)
    @if ($currForm[1]=="text")
        <div class="form-group">
           <div class="col-md-12">
              <input name="{{$currForm[0]}}" type="{{$currForm[1]}}"
                     placeholder="{{$currForm[0]}}" size="{{$currForm[2]}}">
           </div>
        </div>
    @endif
    [...]
@endforeach
视图将包含加载发送给它的模型的方法和实现,并且基于$editFormArray属性,它将生成自己

比如:

class User extends Model{
    public $editFormArray=array(["name","text",20],
                                ["surname","text",30]);
    [...]
}
@foreach($resource->editFormArrayas $currForm)
    @if ($currForm[1]=="text")
        <div class="form-group">
           <div class="col-md-12">
              <input name="{{$currForm[0]}}" type="{{$currForm[1]}}"
                     placeholder="{{$currForm[0]}}" size="{{$currForm[2]}}">
           </div>
        </div>
    @endif
    [...]
@endforeach
这种方法让我只为CRUD操作创建一个视图,并根据需要创建一些无法自动计算的其他视图,还允许我动态更改模型表单,添加、删除和编辑我认为合适的字段,但也可以真正加载模型文件

我的一位同事最近参加了一个关于设计模式的课程,认为这是一个糟糕的做法,他说一个普通的MVC,为每个模型CRUD操作手动生成一个视图是正确的方法,但我认为他错了,因为视图本身并不真正计算任何真实的逻辑——所有逻辑实际上都保存在控制器上,所以它只计算显示逻辑,就像正确显示UX本身所需的逻辑一样


有人可以对这些论点稍加解释?

将设计模式混合在一起是一种不错的做法。然而,你必须考虑一些基本原则。 要修改此模板,我需要编辑多少文件?我是否正在编辑控制数据存储/检索和业务逻辑的相同文件

有人在查看模板时是否知道$currForm[0]的语义含义?下一个要编辑这些东西的家伙是谁

您基本上只是在论证,在模型中定义更多的东西可以加快迭代速度。也许,如果你的团队由一个人组成,他们可以把系统放在脑子里,这可能是真的,但随着团队或项目规模的扩大,情况就不一样了

在经常被遗忘的关于软件工程的基本事实中 Robert L.Glass在IEEE软件2001年5月/6月的一篇文章中写道 谈到软件60/60规则,也就是维护 消耗40%到80%的平均软件成本,然后 增强负责大约60%的软件维护 成本,而纠错率约为17%


如果有时高达80%的软件成本是维护成本,那么试着使其易于维护。适当利用关注点分离可以有所帮助。不要听直截了当的教条,但你必须仔细思考某些东西对其他人来说是多么容易理解,以及它如何帮助你避免常见的软件错误。

基本上,有良好的开发过程文档,这里和那里有详细的注释,同时以一种更容易理解的方式更改自动设计逻辑变量名,这实际上是一个很好的方法,对吗?我的意思是,我这样做是因为软件的设计是不断变化的,因此,我不必使用这种方法数百次地编写、删除和编辑相同的内容,我只需修改一个数组,添加/编辑/删除单个元素,以获得表示层中显示的结果,因此我的意图是加快维护速度。是的,你没有抓住重点,但是,如果你的老板让你这么做,那就去做吧。问题是我是这个案子的老板,我正在努力改进我在这件事上的决策,所以如果你能帮我抓住重点,我会很高兴的,我想理解。