WEB编程架构改革初探

potency 2014-07-09 07:01:17

长久以来,编程MVC架构深入人心。随着编程语言的不断进步和发展。这种架构始终没有进步, 我们尝试着将MVC模式大胆进化为VC模式。【千万注意】,我用的是进化,是先有MVC,再有VC。而不是直接VC模式。

再次强调,不是说MVC模式不好。其实还可以进化得更好。当MVC模式你还不熟悉的时候,你无法理解VC模式。
表面上省略掉Model,是编程语言进化的结果。而不是退步。为此会带来效率的大幅度提升。。。

一、 省略掉model的前提条件。
二、 省略掉model的实现。
三、 省略掉model后的强大好处。
四、 如何弥补省略掉model所失去的功能?
五、 为此VC架构的php框架实现。
以上功能下面慢慢补充…
在此抛砖引玉,希望大家不吝赐教。。。。
跟贴有分啊。。。。
...全文
1165 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
potency 2015-02-15
  • 打赏
  • 举报
回复
根据此思想的框架已经开发完成。 已经发布开发版本:http://250.sz400.net/yuyan_kaifa.rar 包含完整的Demo和详细说明文档(没100%完整!)。 1、此次发布为开发版本 仅供测试功能使用(安全等忽略) 2、相关文档在 doc目录 3、数据库文件在 data目录 4、配置文件在App/config.php 文件 5、项目中App\User 和System 100%纯机器生成。非人工手写。 6、App\Default部分也为生成,不过有人工略有修改(1个小时左右)。这也就是为什么没有将代码机器人发布的原因。 运行步骤: 先执行:YuYan.sql 再执行:data.sql 再修改:App\config 里数据库配置 再执行此目录 登录用户名:13510668888 111111 因发布时间极为短暂,所以,错误之处难免,肯请各位批评指正。
potency 2015-02-15
  • 打赏
  • 举报
回复
引用 37 楼 hujun614 的回复:
$data['company_id']=$_POST['id']; $data['kefu_name']=$_POST['kefu_name']; $data['passwd']=$_POST['passwd']; $data['kefu_type']=$_POST['kefu_type']; $data['kefu_name']=$_POST['kefu_name']; $data['open_time']=time(); 这种已经很复杂了啊, 也许你要说这都是代码生成器生成的, 但是修改数据库表结构的造成的改动呢, 还是得一个字段一个字段的写, 这只是一个缩引, HTML展示页面也要一个一个写么?
现在全部是机器生成,前台后台。
hujun614 2014-09-22
  • 打赏
  • 举报
回复
$data['company_id']=$_POST['id']; $data['kefu_name']=$_POST['kefu_name']; $data['passwd']=$_POST['passwd']; $data['kefu_type']=$_POST['kefu_type']; $data['kefu_name']=$_POST['kefu_name']; $data['open_time']=time(); 这种已经很复杂了啊, 也许你要说这都是代码生成器生成的, 但是修改数据库表结构的造成的改动呢, 还是得一个字段一个字段的写, 这只是一个缩引, HTML展示页面也要一个一个写么?
  • 打赏
  • 举报
回复
引用 35 楼 potency 的回复:
[quote=引用 34 楼 micropentium6 的回复:] [quote=引用 32 楼 potency 的回复:] [quote=引用 30 楼 micropentium6 的回复:] I learnt a word today: Narcissism
I also learnt a word today: wuzhi&&youzhi.[/quote] P.S., ur pinyin and English mashup is so cool! Wait a second, did you just copy & paste what I wrote and then appended your pinyin? That's not cool. That sucks for a former fortune 500 PM!!![/quote] sucks uself,guys like P[/quote] nice try, former fortune 500 PM. You are right. ur English sucks
potency 2014-08-22
  • 打赏
  • 举报
回复
引用 34 楼 micropentium6 的回复:
[quote=引用 32 楼 potency 的回复:] [quote=引用 30 楼 micropentium6 的回复:] I learnt a word today: Narcissism
I also learnt a word today: wuzhi&&youzhi.[/quote] P.S., ur pinyin and English mashup is so cool! Wait a second, did you just copy & paste what I wrote and then appended your pinyin? That's not cool. That sucks for a former fortune 500 PM!!![/quote] sucks uself,guys like P
  • 打赏
  • 举报
回复
引用 32 楼 potency 的回复:
[quote=引用 30 楼 micropentium6 的回复:] I learnt a word today: Narcissism
I also learnt a word today: wuzhi&&youzhi.[/quote] P.S., ur pinyin and English mashup is so cool! Wait a second, did you just copy & paste what I wrote and then appended your pinyin? That's not cool. That sucks for a former fortune 500 PM!!!
  • 打赏
  • 举报
回复
引用 32 楼 potency 的回复:
[quote=引用 30 楼 micropentium6 的回复:] I learnt a word today: Narcissism
I also learnt a word today: wuzhi&&youzhi.[/quote] nice to see you again, former fortune 500 PM!
potency 2014-08-11
  • 打赏
  • 举报
回复
引用 30 楼 micropentium6 的回复:
I learnt a word today: Narcissism
I also learnt a word today: wuzhi&&youzhi.
  • 打赏
  • 举报
回复
I learnt a word today: Narcissism
potency 2014-08-06
  • 打赏
  • 举报
回复
引用 26 楼 zgh204 的回复:
框架没有完全的好坏之分,只有适合不适合而已。。 楼主的这个小改革,是没有遇到复杂的业务吧。。 我们这边是在M和C之间增加了module,C只是串联各个module而已,module操作model来实现。。对于各个业务模块的耦合度很低,感觉确实很好用。。
框架没有完全的好坏之分,只有适合不适合而已。。这句话我有专门文章讨论。 module应该在C&&V之上吧。我的框架就是在module下才有这些,module只是一种思想。非程序。由框架,架构实现。
potency 2014-08-06
  • 打赏
  • 举报
回复
根据楼主的思想,我已经完全实现了这种框架,完全活力model层。已经在2项目中使用,同时根据此思想框架,做了一个自动生成代码的系统。实现得很完美漂亮。 暂时没有发现不好。目的已经达到。 准备结贴!
potency 2014-07-21
  • 打赏
  • 举报
回复
引用 26 楼 zgh204 的回复:
框架没有完全的好坏之分,只有适合不适合而已。。 楼主的这个小改革,是没有遇到复杂的业务吧。。 我们这边是在M和C之间增加了module,C只是串联各个module而已,module操作model来实现。。对于各个业务模块的耦合度很低,感觉确实很好用。。
恕我直言,你的第一句看是正确,确实完全错误! 是不是事情也没有对错?只是立场不同?要监狱干嘛? 恕我直言,兄弟你的判断力还极差!
zgh204 2014-07-18
  • 打赏
  • 举报
回复
框架没有完全的好坏之分,只有适合不适合而已。。 楼主的这个小改革,是没有遇到复杂的业务吧。。 我们这边是在M和C之间增加了module,C只是串联各个module而已,module操作model来实现。。对于各个业务模块的耦合度很低,感觉确实很好用。。
xuzuning 2014-07-18
  • 打赏
  • 举报
回复
Laravel 已不是 MVC 的范畴了(其实各种架构、设计模式间并没有明显的界限) 虽然他也按 MVC 描述了一些特征 要说他是三层的话,界限似乎又划分的不那么明确。在视图里可以访问数据库,这在三层中是绝不允许的 他的路由实际是 REST 模式的典型应用。 由于 PEST 是无状态的,显然并不适合做需要用户认证的应用系统 于是 Laravel 就必须破坏一些约定 总之 Laravel 仍然是一个大杂烩,其实其他框架也都是大杂烩
potency 2014-07-18
  • 打赏
  • 举报
回复
引用 23 楼 tangluowen 的回复:
Laravel的作者写了一本书叫《From Apprentice To Artisan》,里面有个章节叫<MVC Is Killing You>、<Bye Bye Models>。好像楼主已经到了跟大神同样的境界了。楼主可以去看看这本书。。。 具体没看懂,作者开发的框架里面有非常明确的MVC文件夹。但是写的书却推翻的了这个观点。楼主有兴趣研究那个吧。thinkphp已经不属于你研究的范畴了。
刚才百度了下Laravel代码。model代码几乎和我一样。但我的代码比他还要更艺术家。更简单,更漂亮。 像他这样实现框架,当然是不需要model的。和我一样的思路。 <Bye Bye Models> 真的可以Byby了。 以php水平来说。ThinkPhP作者已经是非常高的了。他有10多年php开发经验。
tangluowen 2014-07-13
  • 打赏
  • 举报
回复
Laravel的作者写了一本书叫《From Apprentice To Artisan》,里面有个章节叫<MVC Is Killing You>、<Bye Bye Models>。好像楼主已经到了跟大神同样的境界了。楼主可以去看看这本书。。。 具体没看懂,作者开发的框架里面有非常明确的MVC文件夹。但是写的书却推翻的了这个观点。楼主有兴趣研究那个吧。thinkphp已经不属于你研究的范畴了。
xuzuning 2014-07-12
  • 打赏
  • 举报
回复
那你干脆打混战,还讨论什么架构干什么? 快 70 了精力有限,偶尔接个小项目做做。泡论坛是为了不落伍,不动动脑筋不就痴呆了?
potency 2014-07-12
  • 打赏
  • 举报
回复
引用 20 楼 xuzuning 的回复:
你一定要这么认为,我也没办法 但是业务和数据是分不开的,不同的业务处理不同的数据。 这一点你不会否认吧?
MVC各如何处理,本就没有标准。老徐,你这么高手,天天混论坛,不无聊么?出来开发开发程序啊。 我认为业务和数据是可以分开的。C处理业务,M处理数据。真正复杂的处理数据时,可以另创建类。
xuzuning 2014-07-11
  • 打赏
  • 举报
回复
楼主的那两段代码实际都是业务逻辑,属于M的范畴 作为实际的项目,当然可以这样写 但如果是继承于 model 的话,也就 D('add_kefu')、D('view_kefu') 这样就可以了 框架与实际项目的区别在于框架总是要与未知的对象打交道,所以任何一个环节都不能写死 实际项目只关心具体的业务,但写死后对日后会差生一些影响
xuyanlu 2014-07-11
  • 打赏
  • 举报
回复
引用 10 楼 potency 的回复:
[quote=引用 6 楼 xuyanlu 的回复:] MVC中M的主要是处理数据库或者业务逻辑。 更简单的说,其实把C看成商人,V看成顾客,而M则看成生产商。当生产商(M)取消后,那么意味着商人(C)就要承担生产商(M)的责任。虽然看似省略了一步,但其实只是内部消化而已,没了M,那么必然会有另一种产物来替代,来解决所有只在C中处理的业务。当然,也可以都用C,不用M或另一种替代M的方案,这也会使C的负担增大,代码也会更加复杂,代码重用性也会相对降低等等。Thinkphp中封装的一些数据库操作的方法,但未必就不是M的代替口。 个人观点,不喜勿喷~~~
你这是过去的理论,没错,现在编程语言进化,比如php。省略model层。根本没有增加C的负担,反而减小了。这是实际编程出来的结果。 下面代码就是Controler中增加和显示客服的完整代码

public function add_kefu()
	{
	    if(isset($_POST['id']))
	    {
                $data['company_id']=$_POST['id'];
                $data['kefu_name']=$_POST['kefu_name'];
                $data['passwd']=$_POST['passwd'];
                $data['kefu_type']=$_POST['kefu_type'];
                $data['kefu_name']=$_POST['kefu_name'];
                $data['open_time']=time();
                if($data['kefu_type']=='robot')
                    $data['is_online']=1;
                $id=$this->table('kefu')->insert($data);
                if($id)
                {
                    logs('(sql:):'.$this->getLastSql());
                    alert('增加客服成功:其ID为:'.$id);
                }else
                {
                    alert('增加客户失败:原因为:'.$this->getLastError());
                }
	    }else
	    {
	       $this->company_id=isset($_GET['id'])?$_GET['id']:0;
	       $this->display();
	    }
	}

实际代码之二:

//查看本公司所有客服列表
	public function view_kefu()
	{
	    $company_id=$_GET['id'];

	    $list=$this->table('kefu')->where('company_id',$company_id)->select();

	    if(is_array($list))
	    formatDate($list, 'open_time,last_heartbeat');

	    $this->assign('list',$list);
	    $this->display();
	}
这是真实代码之二。可以看出,都是非常简单的代码。 [/quote] 这些代码确实简单,同时业务也不复杂~~ 复杂的业务或需要复杂的sql,又该如何呢? 诚然,你上面的代码干净、利落,但是Think中用的M(),你这里用的this,或许是在C中封装的,但未必不是M的衍生物来代替Model的,复杂的东西依旧需要放到类库里或其他封装类里,也依旧是需要引用的 虽然观点不一致,但还是很佩服楼主的,有自己的想法和坚持~
加载更多回复(18)

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧