当前位置: 首页 > news >正文

34、最简单的mvc框架tiny,总结分析V2版思路

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

总结一下目前tiny的问题

前面已经说了2个:1、TinyMap和2、aop,TinyMap的思路我觉得挺好的,但是TinyMap类实现有点简单粗糙,需要增强。

aop,前面说的方式1,不合适tiny v1,方式2思路就是直接操作class字节码,添加aop的代码,这个jdk 1.5就开始支持了,1.6又增强这个功能,一些开源库都有实现如asm或一些aop框架,spring和hibernate也有用到,但我不想实现了,这个下面有提到原因。

3、设计的问题

tiny的开发属于临时起意,tiny的所有功能中,我觉得视图的处理,aop的绑定方式,mvc的路由,model和表自动对应,前置控制器的注解方式还可以外,其他的功能都实现的太差。

4、其他问题

  • tiny v1的功能感觉就是在东拼西凑,没有一个整体的概念。
  • ioc只是是把model的实例放入action,只能说有一点用。
  • 还有aop的实现,前面说了只能对action(确实有的框架只是对action操作),action里没有业务所以根本不能把鉴权和日志织入到实际的业务中。
  • model虽然是充血模型,但是具体的业务在model里处理,这已经超出了他的能力,就是我们又犯了一个错误,model太胖了。
  • dao,一个要实现所有的数据库操作,真是不敢想象。
  • 数据库连接池的实现,只能算是一个玩具。
  • 还有一个忘记说了就是aop的调用方式太拙劣。

应该还有很多问题,大家有兴趣帮我指出,只要不骂人(脏话),我都会仔细看大家的提的。(我不是高素质的人,但是我保证,我从来没在群里骂过人)


分析一下解决的办法

首先解决整体概念问题:

v1的东拼西凑,是因为没有一个东西能起到连接或融合各个功能的作用。我想这个东西应该是ioc容器,他管理着action,service(业务),aop。就是说前置控制器找到要对应的action后,之后的事就是ioc的了;再有aop要有拦截链的概念,还有v1的aop里也没有当时执行的环境。

model太胖的问题:

太胖了就瘦身下,model里应该有业务的数据和产出或触发业务的行为的能力,然后由service处理具体的某个业务。这里应该是model调用service?这是最直接的想法,起码我是这么想的,但是就像action和视图一样,我们需要解耦这个关系,所以model没有直接调用service,model会发出触发了某业务的事件,具体由哪个service处理,model就不管了。这里我以前看到过一个牛x人做的形象说明:

你受到了拆迁部门不公平的拆迁政策,你到政府 投诉,这时肯定会有一个人或一个部门来接待你,他们听了你的投诉后,不会处理你的投诉,会告诉你,我们知道这个事了,我把这个事交给有关部门来处理的,你放心吧。
接待你的人或部门就是model,有关部门就是service,所以model只是 触发了这个 业务的事件而已。

dao里要有接口的概念,支持多数据库,像视图的多态。初步想,没想好。

数据库连接池的实现,呵呵,这个本来就是一个玩具,我没想把它弄的多么强大。但是我们会提供其他主流连接池的支持。

V2版思路

临时记录一下。



tiny v1功能不再更新,v2设计中,请稍候。。。

转载于:https://my.oschina.net/eternal/blog/223697

相关文章:

  • linux ----系统下各个文件夹的作用及系统启动顺序
  • 妙趣横生的算法--二叉树
  • 在 Cacti 下实现监控 IIS 服务器
  • asp.net 页面实践执行顺序
  • First First
  • 从凭证反查日记账
  • shell 删除文件过期文件
  • Mysql++详解
  • Visual studio 替换使用正则表达式 查询http
  • android Setting
  • 【3】iptables理解 - filter表
  • CultureInfo.InvariantCulture 作用
  • Mysql的优化实践分析
  • 自定义QToolButton
  • invoke-command
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Js基础——数据类型之Null和Undefined
  • laravel with 查询列表限制条数
  • Mysql数据库的条件查询语句
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • uva 10370 Above Average
  • Windows Containers 大冒险: 容器网络
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 前端
  • 用Canvas画一棵二叉树
  • Nginx实现动静分离
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # .NET Framework中使用命名管道进行进程间通信
  • # Panda3d 碰撞检测系统介绍
  • %check_box% in rails :coditions={:has_many , :through}
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1) caustics\
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (poj1.3.2)1791(构造法模拟)
  • (二)斐波那契Fabonacci函数
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (简单) HDU 2612 Find a way,BFS。
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一) springboot详细介绍
  • (转)3D模板阴影原理
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .form文件_SSM框架文件上传篇
  • .net 调用php,php 调用.net com组件 --
  • .net专家(张羿专栏)
  • @Autowired自动装配
  • @PreAuthorize注解
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例