从零开始编写自己的C#框架(2)——开发前准备工作

原文:从零开始编写自己的C#框架(2)——开发前准备工作

  没想到写了个前言就受到很多朋友的支持,大家的推荐就是我最大的动力(推荐得我热血沸腾,大家就用推荐来猛砸我吧O^-^O),谢谢大家支持。

  其实框架开发大家都知道,不过要想写得通俗点,我个人觉得还是挺吃力的。在本系列中,我不会很深入的去讲述那些映射啊关系啊(绕得我头都晕了,这些请大家去查看相关的文档学习吧)......概念上的东西会少讲,直接上实例,讲实际应用。当然如果您觉得这样很不尊重面向对象什么的,那也没办法,只能说我们不在一个频道上。

  本人是个技术宅,第一次写长篇连载经验不足,有时候会词不达意,这也是很正常的事情。由于空闲时间不是非常多,发贴间隔时间可能有时会长点,希望大家谅解。

  也不再罗嗦太多,下面进入正题。

 

  俗话说工欲善其事必先利其器,在准备开发前,还需要做好各方面的准备工作,了解相关知识。

 

  怎么开始呢?

  要开发一个项目,有过开发经验的人都知道,按软件工程的话来讲,必须先做好需求分析,然后总体设计与详细设计,跟着编码,测试......

  而在进入开发之前,我觉得除了开发环境与工具的准备之外,思想上的准备还是非常有必要的,如果不了解将要开始的项目,那就会觉得很蒙,迷迷糊糊的,无从下手(碰过不少这样的朋友,呵呵......)。

  要接手开发一个项目,首先要问自己思想上准备好了没有?也就是说做为一个项目的主要执行人员,你清楚你在做什么吗?要实现什么功能?怎么实现?用什么平台、工具开发?涉及什么技术?和什么人一起开发?水平如何?可能会遇到什么样的困难?怎么解决?项目涉及什么业务?你了解这些业务流程吗?对性能与安全有怎样的要求?如何优化?你懂得代码安全与服务器安全吗?要写那些文档?怎么写?有没有开发计划?计划花多长时间?怎么控制进度?......

  很多朋友可能要说,我做这么多年开发,并没有考虑过上面的问题,还不一样能将项目做出来,而且做得很好。是的,对于有经验的朋友来说,其实一拿到需要文档,甚至客户(或老板)口中只要简单的描述出想要的功能,而我们就会立刻在大脑中描绘出这个功能实现的界面,以及要如何实现,在实现的过程中会碰到那些问题,而这些问题很多又会想到使用什么算法或解决方案来处理......其实这个过程不就是已经回答上面的问题了吗?就如下面那样(盗用了《为什么不能打断程序员?》的图片,嘿嘿)

  

  而对于还没有足够经验的朋友们来说,还是脚踏实地,在接到项目后认真思考一下上面的问题,练习练习这种思维模式比较好。这样才不会像不少开发人员那样,项目做着做着就烂尾了......或者是做出自己也不知道是什么的,无法进行二次开发的项目出来......因为这种的事情我自己也经历过,而接触过这类型的开发人员也不少(后面文章会举一些相关例子给大家参考一下)。

  当然如果不会回答上面的问题,没有做好准备也问题不大,但必须要有一颗坚持到底,迎难而上的心,因为大牛们都是从初学者来的,只要认真学习,当你经历了N个项目后,也就成为别人眼中的大神了。

  上面的问题并不要求全部都懂得,但在开发之前最好还是有所了解,最好将对它们的思考一一记录下来(无论是答案还是疑问),形成文档,这对你在实际的需求分析与相关设计时很有帮助,当然你试过了就知道其中的好处。

 

  那跟着下来,我们先做一做这个问答题,了解一下将要开发的ORM框架一些问题。

  做为一个项目的主要执行人员,你清楚你在做什么吗?

  我准备使用C#语言,借用一些利器(插件)开发一个 ORM框架,框架的数据层代码与逻辑层代码直接使用插件生成,减轻开发人员重复工作,减轻开发工作量与出错率;框架的权限管理可以像QQ那些,控制帐号在同一时间只能一个人登陆使用,如果有人在其他电脑或新窗口登陆时,原登陆会给踢除下线,当然设置这个帐号为多人使用时,可以做到同时在线,有在线列表可以对登陆用户进行维护,查看这些用户当前位置以及登陆、操作日志;权限按部门、职位进行划分,为不同职位定义对每个页面以及页面上的按键赋予不同的操作权限;每个页面与按键在添加时需要在系统中进行注册,当用户未指派指定按键操作权限时,自动禁用该按键,页面里的所有链接使用指定算法进行加密,即用户只能通过页面生成的链接或按键点击进入下一个页面,直接复制修改Id等参数将被默认为非法访问;框架有自动记录用户操作日志功能,即用户进入了什么页面,做了什么操作都可以自动记录下来;列表页面的相关操作(比如修改状态、保存排序、自动保存排序、列表排序、列表翻页......)等各种常用功能将会使用相关插件或将代码进行封装起来,在开发时不用再重复复制或编辑代码操作,直接通过继承父类实现;对于数据量不大的表直接使用Redis缓存处理,减轻对数据库的访问量,提升框架性能;......总之整个框架既要保存开发的便捷性(手写的代码量少,开发效率高),又要保证其安全可靠,运行性能高效。

 

  用什么平台、工具开发?

  使用Windows7操作系统,应用VS2010、MsSql2005、Excel、Word、Visio等软件,以及ReSharper、SubSonic3.0、Redis、FineUI等插件来开发实现。

 

  涉及什么技术?

  本框架将会使用ASP.NET(C#)、MsSql、SubSonic3.0、FineUI、Linq、T4模板、IIS、Redis缓存等相关技术。(后面的对应章节会对其中一些技术做出相关说明)

 

  要实现什么功能?怎么实现?

  要实现的功能前面已进行简单的描述。

  实现的步骤:将会按照软件工程所描述的步骤,首先会制定开发规范要求、编写需求文档、开发文档(总体设计文档)、详细文档(细化相关技术难点与算法,绘制相关算法、流程图表)、设计数据库、然后编码、测试、部署上线等,整个过程将会涉及很多文档的编写与维护工作,在实施过程中不断完善相应文档,并做好版本控制以及项目进度控制工作,做到项目需求的修改与变动都有法可依(有文档可供查询与查看),执法必严(严格控制开发进度)。

 

  和什么人一起开发?水平如何?

  本框架将由我一人开发。本人有十多年开发经验,曾独立开发过一个J2ME开发框架(组件模式)、安卓开发框架,以及.NET平台4个大版本的ORM框架等,曾负责或参与几十个大中小项目,有丰富的开发经验。

 

  可能会遇到什么样的困难?怎么解决?

  为了避免与公司项目有版权纠纷,整个系统将重新设计,应用更新的设计理念与功能设计,所有代码将重新手打出来,架构代码全部重构,这可能会遇到很多新的技术难点。对权限管理也将使用更合适的架构,使它可自由扩展,权限管理更加灵活,以使它能支持全国性大公司下,各分公司能独立支持各自的人事与权限管理和业务管理(各分公司查看与管理权限互不影响)。由于是业余时间开发,并要编写开发教材、开发文档与说明,时间将会变得不可控。另外一直以来都在使用ExtJS,现在新框架将要使用FineUI,可能会存在未知的技术问题需要解决。

  以上问题我将会通过在设计阶段对功能与算法进行细化,绘制相应的流程图表,形成完善的开发文档来指导开发,以实现对项目的技术难点与进度把控。而对相关插件将作进一步研究,熟悉使用方法,减少可能出现的技术问题。

 

  项目涉及什么业务?你了解这些业务流程吗?

   本项目只是一个ORM框架,只实现基本的基础开发架构,不涉及具体的业务。(以后如果有需要,再考虑增加一些OA常用的功能)

 

  对性能有怎样的要求?如何优化?

  对于ORM的优缺点,网上的讨论已经有很多了,这里就不再细说。一般来说ORM框架会有性能上的损耗,但带来的是开发效率的提升,从时间成本、人工成本等各方面来说,它都是我们的首先,当然某些特殊项目对性能要求非常苛刻的自然另当别论了。我们要寻找的是开发效率和性能中间找一个平衡点,而不是固执的要求整个框架使用一种技术。

  本框架将会使用到缓存技术(目前选择的是使用Redis缓存,不过对于使用虚拟空间的朋友可能并不合适,到时会提供别一种纯粹使用IIS缓存跨站解决方案),减少数据库交互次数,提升框架执行性能。另外在数据库结构设计上,也会应用一些设计模式,减少表关联的方法来提高查询效率。在编写代码的时候也会在适当的地方提出优化说明,提高性能。

  另外要说明一点,本框架不会完全使用面对象的思想来开发,而是以开发效率与性能等综合考虑,在合适的地方使用合适的方式来实现,特殊情况特殊处理。比如框架使用的是SubSonic3.0插件,但某些地方也会直接使用ADO.NET来执行相关语句,因为这样处理代码量会更少,性能更优。而在复合查询需要涉及多个表处理的地方,也会考虑使用存储过程来实现,而不是死板的使用面向对象思想,写了一大堆代码以牺牲性能与开发效率来实现目的。一切都以开发效率为原则优先考虑。

 

  你懂得代码安全与服务器安全吗?

   一直以来都很注重代码与服务器的安全问题,并关注这些方面的文章,努力提升自己。在公司技术部门中,做为资深的软件开发工程师,对将要上线前的代码都会经我手进行安全性检查,有丰富的经验。而对服务器方面,也有多年各种类型服务器的维护以及安全部署经验,将各种类型的入侵挡之门外。

 

  要写那些文档?怎么写?

   整个项目的实施将会涉及很多文档的编写,具体请留意后面的章节《怎么编写相关文档》。

 

  有没有开发计划?计划花多长时间?怎么控制进度?

   本框架将会利用晚上与周末时间来开发,平均每天两到三小时左右,具体的开发计划与进度甘特图将会在相关的设计文档与数据库结构设计好以后,根据功能与个人的时间安排来编写甘特图,来确定开发计划。具体花费时间将在甘特图出来以后能才确定。对于进度的控制,具体请看后面的章节《在项目实施中如何有效控制项目进度》。

 

  我没有经验怎么办?

  以上的准备工作,对于不同项目不同工作经验的人来说,要准备的内容也是有差别的,这个要根据具体情况而定,总的来说,主要目的就是通过一些手段或方法, 让自己对整个项目有个总体的认知和准备,以减少项目失败的机率。无论做什么项目都好,学习与沉淀是非常重要的。要在合适的时间做出合适的判断和处理,才能达到最优的效果。有多少知识的沉淀,就搭多大的框框。框架的功能不是越多越好,适合当前的环境所需要的,才是最合适的。

  有时候我们学习,并不一定要知其所以然。有朋友可能会说,你不了解得深入,怎么能做好它呢?其实所以然是在知其然的基础上研究出来的,我们必须先踏出第一步,就算做出一个丑陋的框架,那也无所谓,因为有了第一个才会有第二个第三个。只有做过一次,你才能了解框架的结构,只有将自己搭建好的框架应用到生产环境中进行检验,才知道其中的优劣,才能不断的找出问题,不停的学习,然后再进行升级,那么它也将越来越完善。而在完善的过程中,你就越来越了解所以然了。

 

  总结

  如果将要开发的是一个商业项目,要考虑的还不至上面这些,除了投入、产出、市场、风险外,还要考虑需求变更、团队协作、服务器负载、分发、部署、安全(服务器、代码等安全)、测试(指定整个的测试流程)、维护......

  当然这只是一个小小的、常用的ORM开发框架而已,所以所要注意的只是技术相关的内容,只要你能坚持看完本系列文章,有一定的C#基础,就可以打造一个属于你自己的ORM框架。

 

  由于本人理论水平有限,如果在某些地方使用的字词描述以及技术术语的使用不恰当,敬请谅解。

 

 

 版权声明:

  本文由AllEmpty原创并发布于博客园,欢迎转载,未经本人同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如有问题,可以通过1654937@qq.com 联系我,非常感谢。

  发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:327360708 或Email给我(1654937@qq.com),大家一起探讨。

  更多内容,敬请观注博客:http://www.cnblogs.com/EmptyFS/

 

时间: 2024-10-24 06:40:00

从零开始编写自己的C#框架(2)——开发前准备工作的相关文章

从零开始编写自己的C#框架(3)——开发规范

原文:从零开始编写自己的C#框架(3)--开发规范 由于是业余时间编写,而且为了保证质量,对写出来的东西也会反复斟酌,所以每周只能更新两章左右,请大家谅解,也请大家耐心等待,谢谢大家的支持. 初学者应该怎样学习本系列内容呢?根据我自己的学习经验,一般直接看一遍的方法,学习与认知都会比较浅,很快就忘了.而看完后写笔记.手抄或将所看的内容照着打一遍或多次的,可以比较深刻的理解文章或代码中的思想,并能将里面的核心内容牢记在心.   对于开发规范,都是老生常谈的事情了,很多正规一些的公司都有一套规范来约

从零开始编写自己的C#框架(17)——Web层后端首页

原文:从零开始编写自己的C#框架(17)--Web层后端首页 后端首页是管理员登陆后进入的第一个页面,主要是显示当前登陆用户信息.在线人数.菜单树列表.相关功能按键和系统介绍.让管理员能更方便的找到息想要的内容. 根据不同系统的需要,首页会显示不同的内容,比如显示公司公告.公司新闻.内部短消息.个人事务.各种业务提醒......等各种内容,这些大家可以需要去进行呈现. 先上代码 Main.aspx 1 <%@ Page Language="C#" AutoEventWireup=

从零开始编写自己的C#框架(11)——创建解决方案

原文:从零开始编写自己的C#框架(11)--创建解决方案 这段时间一直在充电,拜读了园子中大神们的博文(wayfarer的<设计之道>.TerryLee的<.NET设计模式系列文章>.卡奴达摩的<设计模式>还有其他一些零散的文章),获益良多,虽然对大部分设计模式还是有点蒙,不过还是大长见识了.另外还购买了园子里范钢大神的大作<大话重构>和其他大神推荐的<重构:改善既有代码的设计>,每天早上早起一小时看书,感觉这个时间头脑清晰,看书的效率特别高,向

从零开始编写自己的C#框架(4)——文档编写说明

原文:从零开始编写自己的C#框架(4)--文档编写说明 在写本系列的过程中,了解得越多越不知道从哪里做为切入点来写,几乎每个知识点展开来说都可以写成一本书.而自己在写作与文档编写方面来说,还是一个初鸟级别,所以只能从大方面说说,在本框架开发所需的范围内来讲述相关要用到的知识点,至于要更深入的去了解,请大家观看其他大牛的博客或购买书籍来学习. 为了加快进度,会对目录进行修改,将一些知识点合并或在后面使用的章节再进行描述. 谢谢大家的支持,如果您觉得本文对您有所帮助,请帮忙点击支持或发表评论.  

从零开始编写自己的C#框架(9)——数据库设计与创建

原文:从零开始编写自己的C#框架(9)--数据库设计与创建 对于千万级与百万级数据库设计是有所区别的,由于本项目是基于中小型软件开发框架来设计,记录量相对会比较少,所以数据库设计时考虑的角度是:与开发相结合:空间换性能:空间换开发效率:减少null异常......当然不同的公司与项目要求不同,初学者要学会适应不同的项目开发要求,使用本框架开发时,必须严格按照本章节的要求来设计数据库,不然可能会产生不可控的异常.   从零开始编写自己的C#框架 数据库设计规范   文件状态: [√] 草稿 [ 

从零开始编写自己的C#框架(1)——前言

原文:从零开始编写自己的C#框架(1)--前言 记得十五年前自学编程时,拿着C语言厚厚的书,想要上机都不知道要用什么编译器来执行书中的例子.十二年前在大学自学ASP时,由于身边没有一位同学和朋友学习这种语言,也只能整天混在图收馆里拼命的啃书.而再后来也差不多,自学了很多不同的知识,都一直只能自己默默的克服一个又一个困难.所以这几年带一些应届生或只有一两年经验的新人时,都会同他们讲:你们现在太幸福了,有问题可以找度娘,还可以找我来解决.做为过来人,能深深的体会到刚入门的时候,没有系统的介绍和老师指

从零开始编写自己的C#框架(8)——后台管理系统功能设计

原文:从零开始编写自己的C#框架(8)--后台管理系统功能设计 还是老规矩先吐下槽,在规范的开发过程中,这个时候应该是编写总体设计(概要设计)的时候,不过对于中小型项目来说,过于规范的遵守软件工程,编写太多文档也会拉长进度,一般会将它与详细设计合并到一起来处理,所以本文档看起来会怪怪的,不是很符合规范,它只是从实用角度出发来编写,以指导后面功能的设计与开发.     从零开始编写自己的C#框架 后台管理系统功能设计文档     文件状态: [√] 草稿 [  ] 正式发布 [  ] 正在修改 文

从零开始编写自己的C#框架(6)——SubSonic3.0插件介绍(附源码)

原文:从零开始编写自己的C#框架(6)--SubSonic3.0插件介绍(附源码) 前面几章主要是概念性的东西为主,向初学者们介绍项目开始前的一些知识与内容,从本章开始将会进入实操阶段,希望跟着本系统学习的朋友认真按说明做好每一步操作(对于代码最好是直接照着文档内容在你的IDE中打一次出来,而不是使用复制粘贴),这样对你理解后面的章节会有较好的帮助,如果你对我这种书写方式有什么建议或支持,也希望在评论中留言,谢谢你的支持.   SubSonic3.0简介 SubSonic是Rob Conery用

从零开始编写自己的C#框架(15)——Web层后端登陆功能

原文:从零开始编写自己的C#框架(15)--Web层后端登陆功能 对于一个后端管理系统,最重要内容之一的就是登陆页了,无论是安全验证.用户在线记录.相关日志记录.单用户或多用户使用帐号控制等,都是在这个页面进行处理的.   1.在解决方案中创建一个Web项目,并将它设置为启动项   2.添加引用   3.添加WebManage文件夹与Login.aspx文件 4.添加登陆页面HTML代码 1 <%@ Page Language="C#" AutoEventWireup="