搭建C#框架 博文观感
最近刚开始着手做项目,在后期开发的时候遇到不少预期之外的问题,而且工期也超出预算不少。反思了一下,主要是做的项目少,前期需求分析不明朗,当然对于框架也没有意识。凡此种种。当然,遇到问题就要去想办法解决,于是看了empty老师关于搭建框架系列的文章,不过还是有好多地方不太明白,暂且记下来一些自己感觉值得注意的地方。后续会更新。
术语
T4模板 SubSonic ORM框架
1.
要接手开发一个项目,首先要问自己思想上准备好了没有?也就是说做为一个项目的主要执行人员,你清楚你在做什么吗?要实现什么功能?怎么实现?用什么平台、工具开发?涉及什么技术?和什么人一起开发?水平如何?可能会遇到什么样的困难?怎么解决?项目涉及什么业务?你了解这些业务流程吗?对性能与安全有怎样的要求?如何优化?你懂得代码安全与服务器安全吗?要写那些文档?怎么写?有没有开发计划?计划花多长时间?怎么控制进度?.
2. 要实现什么功能?怎么实现?
要实现的功能前面已进行简单的描述。
实现的步骤:将会按照软件工程所描述的步骤,首先会制定开发规范要求、编写需求文档、开发文档(总体设计文档)、详细文档(细化相关技术难点与算法,绘制相关算法、流程图表)、设计数据库、然后编码、测试、部署上线等,整个过程将会涉及很多文档的编写与维护工作,在实施过程中不断完善相应文档,并做好版本控制以及项目进度控制工作,做到项目需求的修改与变动都有法可依(有文档可供查询与查看),执法必严(严格控制开发进度)。
3.实际上编写文档就像写作文,只要条理清晰的讲述出相关内容,突出重点,不要偏离该文档主题就可以了。当然如果你能详细的将5个W2H原则说明清楚,再配上相应的图例(流程图),那就更棒了。
5个W2H原则说明:1.WHY ——为什么?为什么要这么做?理由何在?原因是什么?2. WHAT——是什么?目的是什么?做什么工作?3. WHERE——何处?在哪里做?从哪里入手?4.WHEN——何时?什么时间完成?什么时机最适宜?5. WHO——谁?由谁来承担?谁来完成?谁负责?6.HOW——怎么做?如何提高效率?如何实施?方法怎样?7. HOW MUCH——多少?做到什么程度?需要多少时间?数量如何?质量水平如何?费用产出如何?
4.日常开发的很多情况下为了复用一些共同的东西,会把一些各层都用的东西抽象出来。如我们将数据对象实体和方法分离,以便在多个层中传递,例如称为Model。一些共性的通用辅助类和工具方法,如数据校验、缓存处理、加解密处理等,为了让各个层之间复用,也单独分离出来,作为独立的模块使用,例如称为Common。
业务实体Model:用于封装实体类数据结构,一般用于映射数据库的数据表或视图,用以描述业务中客观存在的对象。Model分离出来是为了更好地解耦,为了更好地发挥分层的作用,更好地进行复用和扩展,增强灵活性。
l 通用类库Common:通用的辅助工具类。
在第5.2节中我们讲过可以将对数据库的共性操作抽象封装成数据操作类(例如DbHelperSQL),以便更好地复用和使代码简洁。数据层底层使用通用数据库操作类来访问数据库,最后完整的三层架构如图14-3所示。
图14-3 最后完整的三层架构
数据库访问类是对ADO.NET的封装,封装了一些常用的
重复的数据库操作。如微软的企业库SQLHelper.cs,动软的DBUtility/DbHelperSQL等,为DAL提供访问数据库的辅助工具类。
5.SubSonic是Rob Conery用c#语言写的一 个ORM开源框架,使用BSD软件授权许可(The BSD 3-Clause License)。它是一个实用的快速开发框架,通过非常简单的配置,以及附带的T4模板,就可以帮我们生成功能强大的数据访问层工具,让开发人员远离SQL语句的拼接,专注于业务逻辑的开发。
6。为什么多数公司会忽略需求分析的重要性,主要原因我觉得有三种,一是需求方也不明白自己要的是什么;二是沟通问题,需求方自认为讲得很清晰了,以为开发方相关人员明白它想要的,而开发方也自认为已经理解了需求方的要求;三是觉得需求很简单,不必要花太多时间浪费,早点开发早点完工,节省开支。
所以需求的采集,重点在于沟通与记录,要多提问多思考多论证。
怎么进行需求采集
在同用户的交流过程中收集各种用户的信息与要求,且第一时间将得到的需求整理成文字描述,一一记录下来。在需求采集的过程中,可以要求需求方提供相关的文档、报表、业务流程图等内容给我们参考,然后在这些基础上认真思考在软件上实现的UI大概样子,里面包含什么功能,可能存在什么问题或难点,及时与需求提出者做多次确认,看我们的理解是否是正确的,排除不合理的地方,明确各个业务流程与约束。
编写需求文档
需求文档的编写原则是:必须清晰明了描述要求,只描述做什么,不描述怎么做。
7、
创建数据库
1、 数据表设计要求
1. 数据库表名与字段名应遵守Pascal风格,包含一到多个单词,每一个单词第一个字母大写,其余字母均小写。(具体命名要求请查看第3章节)
2. 如果是关联表,则命名规则为R_表A_表B,如R_ProductInfo_Tag等。
4. 对于视图命名,规则为View_表A,视图由多个表产生,就用下划线连接几个表名,如View_ProductInfo_ProductClass。
5. 存储过程,命名规则为P_表名_存储过程功能名称。如P_ProductInfo_Add;如果该存储过程是很多表共用的,命名为:P_All_存储过程功能名称
6. 数据字段命名,也使用Pascal风格。当字段引用的是其他表字段时,使用表名_其他表字段名称,间用下划线隔开,命名规则:表名_单词。如ProductInfo表与ProductClass表关联的字段:ProductClass_Id,ProductClass_Name等。与外表的主键或相关字段引用时(包括状态值),须加同时添加外表所引用主键(或状态值)对应的名称,以方便查询时减少多表关联语句的编写,提高代码执行效率,详细请看《数据字典》中的设计。
8.
本框架主要有四种日志记录,分别是登陆日志、操作日志、手动收集异常日志和自动收集异常日志四种
http://www.cnblogs.com/EmptyFS/
搭建C#框架 博文观感的更多相关文章
- 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(下)
在上一篇(详解intellij idea 搭建SSM框架(spring+maven+mybatis+mysql+junit)(上))博文中已经介绍了关于SSM框架的各种基础配置,(对于SSM配置不熟悉 ...
- 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(上)
SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...
- 网络采集软件核心技术剖析系列(7)---如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)
一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件 ...
- Maven环境下搭建SSH框架之Spring整合Hibernate
© 版权声明:本文为博主原创文章,转载请注明出处 1.搭建环境 Spring:4.3.8.RELEASE Hibernate:5.1.7.Final MySQL:5.7.17 注意:其他版本在某些特性 ...
- ASP.NET Web API 2系列(一):初识Web API及手动搭建基本框架
1.导言 随着Web技术的发展,现在各种框架,前端的,后端的,数不胜数.全栈工程师的压力越来越大. PC端,pad端,移动端App(安卓/IOS)的发展,使得前后端一体的开发模式十分笨重.因此,前后端 ...
- 使用maven搭建ssh框架
首先搭建sturts2框架,配置pom文件: <properties> <!-- 文件拷贝时的编码 --> <project.build.sourceEncoding&g ...
- myeclipse搭建SSH框架
搭建SSH框架 Struts+hibernater+spring架构(myeclipse) 右击,首先加入spring,加入hibernater,再加入struts2 复制jar包(把tomcat发布 ...
- 搭建struts2框架
struts是一个经典的MVC模式拦截器比过滤器拦截的力度更大 搭建struts2框架1.引入lib包 9个(2.3版本的)common-fileupload;common-io;common-lan ...
- 准备.Net转前端开发-WPF界面框架那些事,搭建基础框架
题外话 最近都没怎么写博客,主要是最近在看WPF方面的书<wpf-4-unleashed.pdf>,挑了比较重要的几个章节学习了下WPF基础技术.另外,也把这本书推荐给目前正在从事WPF开 ...
随机推荐
- block的一点知识
一个block的笔记: http://www.cnblogs.com/xinye/archive/2013/03/03/2941203.html http://segmentfault.com/q/1 ...
- 【C/C++】Linux下system()函数引发的错误
http://my.oschina.net/renhc/blog/54582 [C/C++]Linux下system()函数引发的错误 恋恋美食 恋恋美食 发布时间: 2012/04/21 11:3 ...
- 2、Lucene 最简单的使用(小例子)
在了解了Lucene以后,我打算亲手来做一个Lucene的小例子,这个例子只是Lucene最简单的应用:使用Lucene实现标准的英文搜索: 1.下载Lucene 下载Lucene,到Lucene的官 ...
- MapReduce工作机制
MapReduce是什么? MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,MapReduce程序本质上是并行运行的,因此可以解决海量数据的计算问题. MapReduce ...
- iOS7 UIKit动力学-碰撞特性UICollisionBehavior 下
上文讲到了为window加一个边界.实现碰撞的效果,接下来我们将提到一个托付方法: - (void)collisionBehavior:(UICollisionBehavior *)behavior ...
- opengl笔记——旋转,一段代码的理解
重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix g ...
- To restore the database on a new host-将数据库恢复至一个新的主机上
To restore the database on a new host:1. Ensure that the backups of the target database are accessib ...
- 【线段树求最靠前】【HDU2795】【Billboard】
题意: 有一个H*W的广告牌,当插入一个广告时(1*Wi),问最靠前的插入方式是什么 新生赛有个类似的题目,可惜当时居然没水过去. 果断用线段树做 以H为线段 建树,存[l,r]中最大的宽度,因为区间 ...
- HTML5新特性学习-1
本文在于巩固基础 新特性:音频的使用 <!DOCTYPE html> <html> <head lang="en"> <meta char ...
- 使用fat jar和exe4j把java程序打包成exe执行文件---转载的
java应用编写测试好之后都是jar包或class文件,客户拿到这个东西后一般是不会java开发者那样在命令窗口下面输入运行的.客户要求的就是直接点击应用名称运行.java在方面做得很不友好,开发人员 ...