我写项目的思路

三层的思路是要把页面(UI、数据显示)、业务逻辑、数据处理(也叫持久化)分离开来处理,思路自然是好的,但是一到了实际应用中,好多人就会遇到一点小小的问题,于是产生了好多的争论。我觉得一个好的解决方案使用起来应该更容易一些,不应该导致很多人“误入歧途”。所以我觉得三层的分割思路视乎有一点点小问题。

所以我就想了一个自己的分割方式——业务逻辑与代码分离开来!分离之后就要找到一个契合的点,把分开的两个东东在连系起来,这个契合点就是数据库。(我觉得三层的契合点是实体类)

我的具体想法就是:
1、 想方设法把业务逻辑(也就是客户提出来的需求)转换成数据库结构。
2、 设计数据库
3、 实现基本的增删改查、统计汇总、报表打印、导出、审批流、个性化设置等功能。

请注意,第三点里面的“实现”是完全不考虑业务逻辑的,也就是说代码写完了之后可以实现各种行业、各种项目的要求(也就是不同的业务逻辑)。以不变应万变的效果。

【示意图】
 

怎么样简单吧,如果把数据库看成中心的话,那么左面是业务逻辑,右面就是程序实现(也就是编码)。如果只看右面的话,那就是和业务逻辑无关的,比如说“添加”,就是添加数据,管他是添加产品信息,还是添加员工信息,还是添加请假信息,还是批准一个出车申请,都是添加数据,那么我是不是可以只考虑如何去添加数据,而不用去考虑添加的到底是员工信息还是请假单呢?于是我就弄出来了一个表单控件,这个控件可以实现添加、修改数据的功能,不管是什么样的业务逻辑(客户的需求),只要是添加、修改数据的、单条记录的,那么就可以使用这个表单控件来实现。这就是我的目的。类似的,如果我要查询,那么我可以使用查询控件(还需要分页控件和现实数据的控件来配合),如果我要向导出到Excel,那也可以使用对应的控件来完成。而我在实现这些控件(编写控件的代码)的时候,根本不用去想业务逻辑。当然控件完成之后要拿到具体的项目里面去验证,然后发现不足的地方再去完善,然后在去检验、完善、检验……。不断进行下去。

那么具体的实现方式是什么呢?简单的说就是写一大堆的自定义控件,然后把这些控件有机的联系在一起。
 

上次说了,显示数据的控件 + QuickPager + Pager_SQL + DataAccessLibrary + 数据库

就是一个分页的解决方案,再加上查询控件,就可以实现分页和查询功能。

那么同理,表单控件 + Insert、Update的封装 + DataAccessLibrary + 数据库

就是一个单条记录的添加修改的解决方案,再加一个控件就可以实现多条记录的批量修改。

列表和表单结合起来,就是主从表的维护

还有数状结构的功能节点、按钮组、导Excel等控件,这些控件结合起来就可以完成三分之一以上的功能,还有权限管理、个性化设置,一些小的项目就可以横扫了。我还没有做过大项目,可能到了大项目里面,我的这些幼稚的想法就不适合了,但是我有信心,只要我接触了大项目,那么我就会利用我在大项目里面了解、体验、掌握到的经验来完善我的这个想法。因为我就是这么一路走过来的,我想我还没有走到终点吧,呵呵。

自然架构

自然架构,自然而然,水到渠成。
    信息管理——信息——数据——数据库——关系型数据库

这就是“自然”,最后为什么是关系型数据库呢?因为他已经好多年了,已经很好很强大了,如果以后OO数据库也可以像关系型数据库这样强大,或者更加的强大,那么最后一个就可以改成OO数据库了。

做了几年的小项目,发现一个问题,对于客户来说什么最重要?数据!我的一个客户是99年成立的,由于行业特殊,有许多数据是要从99年开始一直记录下来,一直到很久很久,于是到现在十年了,至少上千家公司的信息需要录入到新的项目里,以前是保存在Excel或者Access里面的。程序可以换,数据库也可以换,但是数据是不能没有的。

那我们要做什么呢?就是让客户可以更加方便、快捷、安全的管理数据。我们仅仅是做了一个“工具”,让客户用我们的工具来维护数据。如果企业管理器做得更“傻瓜”一点的话,可能我们就失业了。

我并不是完全排斥面向对象,我的那些自定义控件,一开始的时候没有用OO的思路来做(因为一开始的时候不会OO),造成了代码很臃肿,难以维护和扩展。后来学习了OO和设计模式,发现用继承、基类、接口,简单抽象工厂、策略模式、模板模式等来做自定义控件确实很方便,结构也比较清楚。这个就是OO的优势。

什么适合就用什么,不必强求。顺其自然、不做重复劳动,这就是自然架构的宗旨

我知道以数据库为中心,会把范围限制到一个很小的范围,但是这点范围对于我来说也是主够大了,至少两年内是不会感觉小的。一个人的能力有限,能研究出来一点,也是不容易了。

===================================

思路还是有点乱,也许是比较激动吧。23号博客园的活动的时候在做现场的演示吧,通过一个简单的实例来具体说一下吧。

欢迎大家多提宝贵意见。谢谢

我写项目的思路和“自然架构”相关推荐

  1. 【十万个编程篇】写文章与“写项目”的差别

    自古暨今,世间陆续诞生出"现象级"的文学作品,如<左传>.<桃花源记>.<背影>等文章,又如<咏鹅>.<将进酒>.< ...

  2. java后端简历项目经历_从面试官甄别项目经验的角度,说说如何在简历中写项目经验(Java后端方向)...

    在大多的JD(职位介绍)里,会写明该职位需要xx时间的相关经验,换句话说就是需要在简历中看到一定年限的相关商业项目经验,否则估计连面试的机会都没. 在本文里,不讨论这种门槛是否合理,而会以Java相关 ...

  3. 项目经历怎么写_这样写项目经历可以锦上添花

    昨天我们详细介绍了写好工作经历的5个技巧,在这些技巧中,最重要的是量化思维!今天再来说说困扰大家已久的项目经历是怎么回事! 为什么要写项目经历?大多数人写项目经历是因为求职网站上有这个模块的要求,如果 ...

  4. 跟着项目学设计模式(六):三层架构

    前面用5个章节介绍了单例模式和工厂系列模式,这个过程中,如果算上网站开发人员的表示层,那么项目经历了二层到多层的演变: 数据访问层+表示层 => 数据访问层+业务逻辑层+Client层+表示层 ...

  5. 手摸手带你写项目----秒杀系统(一)

    博客地址: 手摸手带你写项目----秒杀系统(一) 所有文章会第一时间在博客更新! 后面的时间我会手摸手带大家一起写几个实战性的项目.主要希望能应用上之前梳理的那些知识点,同时让没有写过项目的同学对实 ...

  6. 淘东电商项目(68) -互联网安全架构设计(黑名单拦截及MD5加签)

    引言 本文代码已提交至Github(版本号:d439ec96b39dc0adf0d697cbc6bfc87c1c3b7dc8),有兴趣的同学可以下载来看看:https://github.com/ylw ...

  7. 记录梦幻手游PC端辅助开发及设计思路之整体架构

    设计思路和整体架构 设计初衷: 梦幻西游手游是一个回合制游戏,手动做任务重复性太多,每天做相同的日常任务毫无乐趣,且消耗时间.目前网络上大部分辅助都要收费,收费也不是很贵,如果是为了玩游戏建议尊重作者 ...

  8. 大学研究生期间写项目书技巧

    想必大家在研究生期间都会经历写项目书这件事,如何写好项目书也是个技术活.以下结合我们学校(国内某985)本科和研究生期间写项目书的一些经历,总结以下几条写项目书的技巧. 1.如何又快又好地写出初稿 首 ...

  9. 腾讯服务器有多少台 微信,腾讯官方写论文:微信的技术架构有多复杂

    原标题:腾讯官方写论文:微信的技术架构有多复杂 腾讯旗下的微信从一个通信工具变成一个庞大平台,究竟经历了什么?微信开发者团队最近一篇论文"Overload Control for Scali ...

最新文章

  1. Django博客系统项目需求分析
  2. 网络流24题 魔术球问题
  3. 随机微分过程matlab求数值解,随机微分方程数值解.pdf
  4. 入门基础-VC网络编程入门
  5. 1.8 编程基础之多维数组 09 矩阵乘法 6分 python
  6. linux losetup命令,losetup命令_Linux losetup 命令用法详解:设定与控制循环(loop)设备...
  7. intelRealsense D435 python3的环境搭建
  8. NullPointerException空指针异常的理解
  9. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-4.动态Sql语句Mybaties SqlProvider...
  10. 智慧路灯杆系统解决方案
  11. java 开源发布系统_18个Java开源CMS系统一览
  12. android调整图片大小,Android图像调整大小并保留EXIF数据(方向,旋转等)
  13. opencv绘制图形轮廓并筛选面积操作
  14. 用VirtualBox创建虚拟机
  15. 帝国php漏洞,帝国cms远程代码执行漏洞-2
  16. 作为学生,我是怎么半年赚到人生第一个三十万的
  17. 英语之脆弱的,易受伤的
  18. 三酷猫学python_python学习第二期
  19. 做眼镜识别的人脸检测
  20. 【SolidWorks】模型状态显示设置介绍

热门文章

  1. nginx的upstream实现负载均衡自带坏点自动剔除功能
  2. [Android Memory] Android系统中查看某个应用当前流量的方法
  3. 文件的上传下载功能的实现(包括进度条)[telerik控件]
  4. 自动运维化tools篇2:通过SSH信任关系,批量修改LINUX密码
  5. vs2005中的aspnetdb(转)
  6. C#将数据库图片显示在pictureBox
  7. Luogu P1041 [2003NOIP提高组]传染病控制
  8. LightOJ 1245 - Harmonic Number (II)
  9. mysql 索引列为Null的走不走索引及null在统计时的问题
  10. getline函数(精华版)