关于代码组织的一些看法(上)

今天看了一个篇关于架构的文章,略有所感,记录一下。

软件的架构基本是从一个原始需求出发,逐步构建可维护、更灵活的开发框架的过程,在这个构建过程中可能会逐渐的增加代码的复杂度来满足灵活性的要求,从这个层面来讲,复杂度和灵活性天生就是对立的,怎么平衡二者的关系,考虑到时间复杂度,成本等等因素,则演变成一门学问,就叫软件工程。以例子来说明呢会更加的清晰。

原始需求,基本办法

我们经常会解决一个问题,比如说我们为了方便给自己定了一个任务列表,在记录任务并可以查看任务状态,还可以更改和删除任务。解决这个需求不难想出一个数据表即可解决:

TaskList{

ID,--编号

Task,--任务名称

AwokeTime,--提醒时间

State --状态}

假定我是在WEB上操作,那么我想完成上述的几个需求,只需要如下几个方法

image

这是最基本的代码了,在一个webform的页面代码中即可以完成所有需求了,通过webconfig配置来改变数据库服务器的位置,通过一个简单的ExcuteSql方法来执行所有对数据库的操作。完成这个任务列表的功能,此时我们只需要一个aspx页面即可,可为什么还需要分那么多层呢。

"我想在Winform也能用"

做软件是为了给人解决问题的,人家就爱用winform的,怎么办,再来个winform的吧,好的,到这里一个软件有两个展现方式,如何解决呢,你在想重新将代码拷贝过来写一个类似web的form吗?那样的话会出现两个一模一样的insert方法,update方法等等,以后改动的话,如果用户有很多的界面展现方式,你要一个个都改吗?那么代码重用的问题出现了,将这些方法独立出来,一份代码web能用,winform也能用,如果想修改其中的某个方法,直接改就是了,代码的唯一性,真不错。

Win form  ----- web form

  \\                    //

insert,update,delete,search

代码怎么组织呢,我们可以再写一个类DB.CS,

image

里面有增删改查四个方法,但是数据操作方法是独立出来了,两种用户界面怎么办呢?大家都知道,winform和webform是需要建立两种项目的,那么我们只有将这个数据操作类在独立出来的基础上封装成程序集共两个项目共同引用了,于是,有了下面的转变

image ---》》image

这些简单的建立了一个比较容易修改数据操作部分和界面部分的模型。

“我们决定采用Oracle来存储数据”

软件嘛,需求的变更早已不再是新闻,客户可能已经有一个数据库,为什么要再投入那么大的成本去适应软件呢?试想一下,如果这个需求在前期并不明确,后期一旦改动我们开发人员将会多么被动,于是,我们可以做好预留,可问题是如果要改动数据操作方法,那么Architect.DB层的代码都要改动,难道我们要将全部代码重写一遍吗?不!我们是程序员,我们可以利用接口做另一套实现即可,如我们可以在某个地方轻松的将”SQL”改为”Oracle”即可让程序更换数据库多好啊,是的我们可以这样做,一个接口,两种实现,根据配置不同来选择不同的实现方式。

image

这样我们就可以根据配置的不同去动态的选择不同的实现,以后如果再有ACCESS的需求也不用怕,直接在加个实现就可以了,在类UserDBO中我们可以根据不同的条件来实例化两个不同的操作类。这样就实现了不同的数据库访问类,通常我们不会将这两种实现代码放到一个类中,分开管理更加方便,于是便有了下图

image

此时我们有了两种数据库的兼容方式,可以更加方便的更换数据库了,但是实际开发中的数据库访问类要复杂的多,所以很多时候我们会将数据访问接口和数据库的操作类分开,变成这样

image

这样做的好处是各个层面上的代码组织比较清晰,没有缠绕到一起,非常便于对各层的修改.然而代码组织到这里,是不是就完成了呢,刚开始看petshop的代码时,我也觉得分层有些太多了,但后来真的接触了比较多的开源代码后,发现是有道理的,下一篇随笔我将会继续写代码组织方面的一些个人见解,包括业务逻辑,缓存和面向服务等等,希望能跟大家交流。

转载于:https://www.cnblogs.com/wengyuli/archive/2010/06/23/code-organ.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CE下基于Zylonite硬件平台的SD卡驱动开发

摘要:本文结合实际项目(一款以WINCE为操作系统内核的GSM/PHS双模智能手机)对嵌入式系统Windows CE5.0的底层驱动(SD卡)的架构进行了分析和研究,以MARVELL公司提供的基于INTEL Zylonite硬件平台的BSP为基础&…

pthread-win32在VC2005下的使用

pthread-win32是一个在Win32环境下的Unix POSIX线程库的移植. 有了它, 可以比较方便的移植Unix/Linux多线程程序到Windows下. 在VC2005下使用也很简单: 下载, 地址是 http://sourceware.org/pthreads-win32 里面include目录中是头文件, lib目录中是.lib和.dll文件. 在VC项目的属…

【转】apt命令

转自:apt命令详解 - 简书 apt命令可以说是Ubuntu系统下最为重要的命令,安装、更新、卸载软件,升级系统内核都离不开apt命令。 一、apt的简介 apt的全称是Advanced Packaging Tool是Linux系统下的一款安装包管理工具。 最初的时候&#xff…

maple 2018 窗口关闭提示乱码_如果解决SOLIDWORKS工程图转CAD字体出现乱码的问题_SolidWorks生信科技...

操作SOLIDWORKS工程图转CAD时,由于SOLIDWORKS使用的是Windows字体,而CAD使用的是线性字体,字体就容易出现乱码的苦恼。一般出现乱码是因为字体映射里面没有中文,所以会导致乱码。遇到这种情况,只需找到字体映射文件&am…

【转】apt 和 apt-get的区别

转自:https://www.sysgeek.cn/apt-vs-apt-get/ Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入。其实早在 2014 年,apt 命令就已经发布了第一个稳定版,只是直到 2016 年的 Ubuntu 16.04 系统发布时才开始引人关注…

准确检测图像的轮廓 opencv_图像处理案例实战

1. 切边源图像: 需求:扫描仪扫描到的法律文件,需要切边,去掉边缘空白,这样看上去才真实,人工操作成本与时间花费高,希望程序自动实现,高效、准确。 实现思路:边缘检测 轮…

pp助手苹果版_再见!PP助手iOS端即将下线 曾是中国最大的苹果助手

苹果PP助手即将下线 在今日PP助手官方发布公告:尊敬的PP助手iOS版用户:衷心感谢您多年以来对我们的支持及厚爱。因业务调整,PP助手将于2020年2月28日正式下线iOS版产品,包括PP助手iOS版、PP助手iOS PC版等。 对您造成的不便还望理…

oppo手机工程模式清除数据需要密码_手机隐藏的快捷键都有哪些?

手机从开发出来到现在,已经换了很多代了,从大哥大,小灵通,到诺基亚到山寨机到苹果到华为,几十年过去了。手机从奢侈品一下飞去每个人手里,反正我手机有手机已经快10年了,所以我相信每个人对自己…

关于竖表转横表的问题

本文作者:dinya内容摘要:在开发过程,经常遇到一些将表的显示方式进行转换的需求,我们习惯性称之为竖表到横表的转换,本文通过一个例子来简要说明常见的两种竖表转横表的问题。本文适宜读者范围:oracle初级&…

全系光谱完整版

宇宙射线也叫电磁波,其中包含γ射线、X射线、紫外线、可见光、红外线、近红外、远红外,还有无线电和超声波。 无线电波是振荡电路中自由电子作周期性的运动产生的. 红外线、可见光、紫外线是原子外层电子受激发产生的. X射线是原…

cat 几行_迷风花说Cat!Cat因为林教练是好教练回去现实却给了一巴掌

滔博TES前主教练迷风花26日发布了微博,就自己离职、Cat林教练事件以及汤汤纵情转会事件进行了澄清,网友粉丝们在看到教练迷风花发布的微博后,更加了解了很多事情的真相,粉丝们纷纷对教练迷风花送上了祝福,教练迷风花到…

前端和后端的英文_计算机专业的本科生在前端、后端、测试和运维之间该如何选择...

首先,对于计算机专业的同学来说,在选择发展方向的时候往往会遇到一些困惑,当前随着计算机技术体系的不断壮大,计算机领域的岗位分类也越来越细化,而且在新技术的推动下,还在不断出现新的岗位,比…

医学影像后处理技术超详细收藏版(上)

转自:医学影像后处理技术超详细收藏版(上) 导语: 医学图像后处理是通过综合运用计算机图像处理技术,医学知识,将由各种数字化成像技术所获得的人体信息按照一定的需要在计算机上表现出来,使之…

【转】VTK和ITK中的坐标系统

当我们在处理医学图像和应用时,一个问题就是坐标系统之间的不同。在图像应用中通常有三个坐标系,分别是世界坐标系,解剖坐标系和图像坐标系。 每种坐标系目的不同,呈现数据的方式也不一样。 解剖坐标系由三个平面组成,…

(ZT)在日本市场推广 iPhone 应用的经验

原贴:http://www.cocoachina.com/appstore/market/2010/0728/1942.html 本文作者为 CocoaChina 会员 “lawrencewu”,是一位专攻日本市场的 iPhone 开发者。他的10款 App (9个收费,一个免费)在9个月的时间里已经取得了…

嵌入式系统 Boot Loader 技术内幕

1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入…

互联网医院 2020年突出成就_【关注】中国社科院发布2020中国医院互联网影响力排行榜...

导 读:11月4日,中国社科院健康业发展研究中心联合好大夫在线,发布2020中国医院互联网影响力排行榜,这是该榜单连续第5年发布。中国社科院健康业发展研究中心以好大夫在线平台611.6亿次的患者浏览轨迹、6648万患者的在线问诊记录、4.7亿次医…

h5链接加上 vconsole_又出爆款!凯美瑞和红旗H5没法比!

论舒适性而言,三厢版车型的优势还是十分明显的。基本可以满足日常商务用途和家用等多种用车环境。今天带来的两款车都是三厢车,分别是红旗H5和宝马1系。那这两款车究竟是骡子是马,还是让大家一起来看看它们的实际表现吧。车型:红旗…

HDOJ 1010 HDU 1010 Tempter of the Bone ACM 1010 IN HDU

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋题目地址:http://acm.hdu.edu.cn/showproblem.php?pid1010 题目描述:代码Tempter of the BoneTime Limit: 2000/1000MS (Java/Others) Memory Limit: 65536/32768K (Java/Others)Total Submission(s): 16817Accepted …

console application_灵活使用 console 让 js 调试更简单

摘要: 玩转console。原文:灵活使用 console 让 js 调试更简单作者:前端小智Fundebug经授权转载,版权归原作者所有。Web 开发最常用的高度就是 console.log ,虽然 console.log 占有一席之地,但很多人并没有意…