企业应用开发模式 ERP项目中应用到的技术和工具

企业应用开发模式 ERP项目中应用到的技术和工具

一、基础技术选型

C# .NET 3.5/4.0  这两个版本的.NET已经相当方便(Linq, Lambda,Parallel),语法简洁,配合WCF和WF两项技术,可以满足快速开发,维护方便的目标。

Win Form  因ERP项目涉及大量的表单(Entry),查询(Enquiry),报表(Report),我以为WinForm仍然是首选技术。自定义控件,数据绑定,自定义窗体,这三项技术组合起来可产生无穷的威力。

SQL Server 2005  取兼容性最好的一个版本。2008/2008 R2/2012均不向后兼容,旧版本数据一旦附加到新版本中后,便不可以在旧版本的SQL Server中附加,备份集也不可以向后兼容。

二、五大核心模块

为保持ERP产品的可配置性,可维护性,首先定义以下基础模块,构建基础的ERP功能集合。这些基础模块是我从工作中接触到的几个ERP产品中总结出来,具备代表性。

菜单设计器 Menu Designer   ERP项目的菜单,导航应该具备可编辑,可调整的特性。菜单和导航数据一般保存于数据库中,或是Xml文件中。

查询设计器 Query Designer ERP项目涉及大量的数据表单,数据查询的需求非常频繁。SQL Server Management Studio是开发人员的查询设计器,在此基础上做一个封装,限定可查询的数据库和资料表,考虑查询权限,拒绝任意的数据修改和删除语句片段以保护数据,最后将数据以列表或网格形式呈现。

报表设计器 Report Designer  同查询的需求一样,如果需要将数据打印成完整的格式,ERP项目应该具备增加自定义报表的特性。兼容当前流行的Crystal Report和Reporting Services。

工作流设计器 Workflow Designer  ERP项目有内建的约定的流程,同时也应该满足批核,通知等特性。

窗体设计器 Form Designer ERP项目应该具备调整和自定义布局的特性。不同的权限和用户,所看到界面应该有所差异。借助于此窗体设计器,调整窗体布局,满足个性化布局的需要。

三、实体映射框架层模式

1  Entity Framework , LLBL Gen,NHibernate

ORM的基础原理是在数据库与面向对象编程中的对象之间做一层封装,以简化数据读写。在性能的反应上,ADO.NET是最好的,它直接工作在数据库驱动层上。ORM则在ADO.NET上做一层封装。关于可维护性,代码生成器可弥补ORM对数据库修改的感知。当发生数据库变更时,直接以生码生成工具重新生成实体代码即可。关于可编程性,强类型的对象,可满足数据绑定时的数据感知需求,节省开发和维护时的成本。

2 ORM高级查询,SQL语句追踪,性能优化

应用ORM做数据访问层的难点在于数据查询,抛弃现有的SQL语句知识,应用OOP语言来做查询,十多行代码是为达到一个子查询的目的,一句SQL语句可替代。涉及数据问题时,还需要借助于SQL Server Profiler工具来诊断问题。

四、界面层模式

1 自定义控件,窗体基础类型定义的原理与实现,数据绑定技术

以WinForm技术而言,继承是为代码重用的重要收益。定义以下几个基础窗体

Entry Form:数据输入窗体,比如销售单,采购单,工作单。

Enquiry Form:数据查询窗体,比如销售单日记帐查询,采购送货查询。

Report Form:报表窗体,读取报表的参数信息,从数据库中抓取数据并呈现报表。

自定义控件是为满足数据绑定的需要,还增加其它特性,比如限制输入长度,只读,可写,大小写,半角全角自动转化等控制。

2 业务逻辑与业务验证

应用ORM编程带来的一大收益是界面与逻辑分离。OOP对象既可代表数据库中的表在内存中的实体,也可包含丰富的自定义逻辑,再加上验证框架,这二项内容的分离和耦合,极大的增强代码的可维护性。

ASP.NET MVC已经强制模型M和界面V的分离,用控制器将它们联系在一起,在数据呈现和数据逻辑方面,相对于Web Form无论是开发,还是维护都轻松很多。

五、功能开发模式

1  框架数据库与业务逻辑数据库,定义代码模块(Module),定义功能(Function)

因为多增加一个数据库框架,与系统通用功能相关的信息都放置于框架数据库中,比如帐套配置,比如查询定义,比如菜单和导航信息。框架数据库承担系统方面的功能载体,与具体的业务功能分离。

2  窗体界面设计 查询(Enquiry)和查找(Lookup)设计,业务逻辑,验证

在第二项内容(五大核心模块)的基础上,ERP项目继续以插件的方式,定义模块,定义功能。一个模块可以简单的理解为一个Visual Studio 项目文件,相关的功能都聚集在其中。销售Sales模块中有报价单,销售单,销售送货,销售退货等功能。

模块中的功能,以第四项内容中提及的方法分三类Entry,Enquiry,Report三大基础业务功能。

此项内容为ERP开发中的日常任务。以ERP的任务分类,Enhancement,Bug Fix,Data Fix三大分类,绝大多数的任务均在此目录中。因Bug带来的数据修复,会给ORM技术团队带来压力。系统产生的数据问题,不再是可以简单的从系统中拷贝一些SQL语句,ORM做为基础的数据访问没有SQL。以我的体会,ORM并不是要你忘记SQL的存在,在应用ORM保存数据之后,我常会以SELECT * FROM table之类的语句去审查数据表中的记录,以确保数据值和数据验证,数据关联为正确。

六、开发工具推荐

SQL Toolbet  SQL Server领域中的Intellisense,好比Visual Studio中的智能提示一样,必备工具。

JetBrain Resharper  当实体与实体间的关系,接口与实现的关系日益复杂之后,Find Usage和Go to Implementation两项功能,可帮助诊断问题,必备工具。

Resharper的Test功能也相当优秀,直接对一个测试方法启动调试,我对单元测试的热爱,源自于此功能。做好一个基础功能,会同样做一个测试方法,以此功能调试跟踪,观测代码的执行。

Code Smith 辅助代码生成工具,必备工具。具备大量的例子,入手容易,案例多,应用广泛。

 

 

Enterprise Solution 应用程序开发框架培训

 

一、系统架构 C# .NET 4.0 + Win Form + SQL Server 2005

二、五大核心模块 (菜单设计器Menu Designer,查询设计器Query Designer,报表设计器Report Designer,工作流设计器Workflow Designer,窗体设计器Form Designer)

三、实体映射框架层模式

1 ORM原理,ADO.NET与ORM的对应关系,Entity,Collection, Validator 之间的关系,应用LLBL Gen Pro 3.1生成代码,使用VS2010应用ORM方式进行操作数据库。应用Code Smith 6.5模板自动化生成数据访问代码。

2 ORM高级查询,SQL语句追踪,性能优化

四、界面层模式

1 自定义控件,窗体基础类型定义的原理与实现,数据绑定技术

数据窗体设计 输入(Entry),查询(Enquiry),查找(Lookup),报表(Report)

3 业务逻辑层处理 业务逻辑与业务验证

五、功能开发模式

1 框架数据库与业务逻辑数据库,定义代码模块(Module),定义功能(Function)

2 窗体界面设计 查询(Enquiry)和查找(Lookup)设计,业务逻辑,验证

六、增值服务 
1 产品持续升级,核心代码共享

2 30+开发助手程序,辅助应用高效开发

3 详尽的开发文档与手册,开发案例,在线技术支持 电子邮箱支持

QQ: 3617 64203

 

EFProf Entity Framework Profile 工具

 

SQL Server Profiler用来跟踪应用程序发送到SQL Server中的SQL语句,用于检测性能,查找问题。Entity Framework 也有它的跟踪工具EFProf,用于跟踪Entity Framework发送到SQL Server中的SQL语句。

首先在代码中添加对程序集HibernatingRhinos.Profiler.Appender的引用,并添加如下方法

HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();

再打开EFProf程序,即可看到基于Entity Framework的程序向SQL Server发送的SQL语句

image

 

执行计划 Query Plan

EFProf可以以图形化的方式查看SQL语句的执行计划,而不必去SQL Server中查看执行计划

image

 

查询执行 Query Execute

如果你想知道查询的结果,可以直接在EFProf中打开查询语句,执行查询。这一个特性能查找数据特别有用。

image 

获取Entity Framework生成的T-SQL语句

实体框架内建了机制来跟踪它生成的SQL语句,请参考下面的代码

using(var db = new SqlEntities()) 
{ 
        var Q = db.Sql.Select(cc => cc.id); 
        return ((ObjectQuery)Q).ToTraceString(); 
} 
这样可以输入实体框架生成的SQL语句。

如何截获Entity Framework的调用

Entity Framework的社区项目EFTraceingProvider,可提供对Entity Framework调用的跟踪。

 
 
 

 

 

 

原文地址:https://www.cnblogs.com/Leo_wl/p/3287473.html