设计一个灵活稳定的多层架构的程序不是件容易的事情。当有了成熟的模式和应用之后,还需要经历各种应用与需求考验,用直白的话说,就是要经得起折腾。最近在重构自己的EPN框架时,有了一些新的体会实践,与各位分享。

首先是数据库的设计,一个框架数据库驱动多个业务逻辑数据库,这已经是大家所推荐的模式了。

如图所示,框架数据库Framework包含业务数据的基础配置,它可以驱动一套或多套业务数据库的运行。

Framework是框架数据库,它包含基础的业务规则,查询,菜单组件,权限,版本管理等。这个框架可以驱动Northwind数据库,以实现北风贸易程序,驱动emp51以实现ERP程序,等等。

在客户端程序登陆时,需要选择数据库为Northwind以表示登陆北风贸易数据库。这个地方还有些改进之处,可以将Database改成Company或System以变成更专业的系统名称,这在后面还有说明。

进入Enterprise Solution系统后,选择数据库注册,调出如下的界面,可以看到它的实现部分

框架数据库驱动业务数据库的全部的秘密就在这里了。Connection Parameter是连接字符串参数,在这里配置的是连接本机SQL Server Express的Northwind数据库,下面的Grid中显示与这个数据库相关的业务逻辑与接口。

Module Name 模块的名称,比如ERP系统中有以下几个模块Engineering,Sales,Purchasing,Production Planning等等
Type 模块类型是,这里是关键的设置点。
IService 接口模块,它定义功能的接口
Service 实现,实现接口中的功能
一个系统中,必须包含一个接口模块,可以有多个实现模块。
BusinessLogic 业务逻辑 为客户定制的业务逻辑
Presentation 展现层,也是界面层。在这里是用的WinForms技术,也可以换成WPF技术,或是SilverLight,ASP.NET Web/MVC,因为界面层只负责绑定数据,业务逻辑已经完整分离到BusinessLogic层中。
Path 模块对应的程序集,通常是一个dll assembly。

在这个版本的EPN框架中,实现了框架程序与业务程序的完全解藕。比如需要以Northwind数据库为基础设计一个贸易程序,它的解决方案视图是这样的

这个视图就是上面公司注册中的代码视图,接口(IService)与实现(Service),业务逻辑(BusinessLogic),再加一个界面层Administration管理贸易订单,客户往来。经由这种设计方法,把业务逻辑及其实现彻底分离出去,以实现通用的C#.NET Win Forms开发框架。

这种设计也有一些缺陷。比如,当业务逻辑过于分散或是完全不相同时,框架数据库也需要重新调整。这里的调整,是数据库内容的重新生成,而不需要对代码作出变更。比如,业务逻辑涉及的查询,报表,菜单,用户喜好(Personalize),功能权限,用户权限都放在框架数据库中,当重新开发一个新项目时,你需要调用如下的系统功能,重新生成这些基础的数据以适应新系统的要求。

功能及其权限

菜单定义

报表定义也需要重新配置参数。

启动查询设计师重新设计查询,以适应新的业务逻辑需要。

最后一项工作内容是翻译资源的重新调校,您需要根据业务需要对翻译作出适当的修改。比如,Style 可翻译为样式,在制衣行业的系统中,应当翻译为款式。

经过这些数据准备工作,新项目的就差不多完成了一半。后面的部分就是完成针对客户的要求,做出各种设计,以确保您的项目准时交货。

转载于:https://www.cnblogs.com/JamesLi2015/archive/2011/12/21/2295416.html

精心设计的基于组件的C# Win Forms实践 一个框架数据库驱动多个业务逻辑数据库...相关推荐

  1. mysql asp.net core_基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入...

    概述 上一章,我们简单的搭建了依赖注入的三层架构,但是,没有真正的使用,而我们现在就使用MySQL数据,基于 EF Core 的 DbFirst 进行框架搭建. 步骤 1. 右击 Entity 项目, ...

  2. 一个基于组件的动态对象系统

    http://hulefei29.iteye.com/blog/1490889 一.静态的痛苦      作为一个项目经验丰富的程序员,你经常会遇到游戏开发过程中的"反复"(ite ...

  3. 基于java的健康管理系统设计与实现(项目报告+开题报告+答辩PPT+源代码+数据库+部署视频)

    项目报告 面向特定群体的健康管理平台设计与实现 随着网络技术的不断发展,网站的开发与运用变得更加广泛.这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特 ...

  4. markdownpad2 html渲染组件出错_Day68 Django forms组件

    目录 forms组件 forms组件类书写 forms组件如何校验数据 forms组件如何渲染标签 forms组件展示错误信息 forms组件钩子函数(HOOK) forms组件常见参数 forms组 ...

  5. 控件-Win Forms窗体控件

    在项目开发中,界面设计是一个很重要的方面.好的界面应该使操作者容易掌握.赏心悦目,把操作看作是一种享受而不是负担.Visual C#.Net提供了丰富的控件,大大简化了界面设计过程. 在桌面应用程序中 ...

  6. 基于组件的.NET软件开发(1)

    基于组件的.NET软件开发 前言 随着软件技术的飞速进步,现代的大型软件都广泛采用了基于软件组件的开发方式.以成熟的CBD(Component Based Design:基于组件的系统设计)理论为指导 ...

  7. 如何使用基于组件的设计方法

    2019独角兽企业重金招聘Python工程师标准>>> 以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 基于组件的设计方法通常在大 ...

  8. [译] JavaScript 中的 CSS:基于组件的样式的未来

    本文讲的是[译] JavaScript 中的 CSS:基于组件的样式的未来, 原文地址:CSS in JavaScript: The future of component-based styling ...

  9. 基于组件的案例:购物车

    基于组件的案例:购物车 <!DOCTYPE html> <html lang="en"> <head><meta charset=&quo ...

最新文章

  1. 如何安装“散装版”(如自己开发的)插件到VSCode
  2. 【数据结构与算法】之深入解析“零钱兑换II”的求解思路与算法示例
  3. 变量的定于[指针/函数指针]
  4. mysql创建操作用户
  5. mysql 自定义函数 事务_MySQL存储过程、触发器、自定义函数、事务
  6. python三级联动菜单_2分钟制作智能式联动下拉菜单,轻松搞定重复内容,录入不出错...
  7. 第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS
  8. oracle windows 优化工具,使用某Windows优化大师对Windows2000操作系统进行了优化,优化完成之后,oracle数据库便无法正常工作...
  9. 鸿蒙系统装机量,王成录:华为对今年鸿蒙OS系统的装机量预估是3亿台
  10. c语言头文件的使用和写法,C语言头文件的使用与写法
  11. 公开课可下载资源汇总【转】
  12. 【转载】mysql语句写作顺序以及执行顺序
  13. python爬虫:scrapy-redis分布式爬虫(详细版)
  14. Java / Tensorflow - Expects arg[0] to be int64 but int32 is provided 异常处理
  15. linux和尚取水设计,小和尚取水
  16. 【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件
  17. Linux之学习目标,初识linux操作系统。(其开发者们之无私奉献与分享合作精神,使我辈敬佩之至,在此由衷地向前辈们表达敬意与感谢。)
  18. 软件工程笔记:Pos系统的分析与设计案例
  19. 矩阵的秩和图像的秩的一些了解
  20. 【原创】赔率、胜率、水位的计算方法

热门文章

  1. 前端性能优化之Lazyload
  2. 程序员的思维修炼》读书笔记
  3. 安卓自定义View进阶-分类与流程
  4. 常见的攻击手段及其防御方式
  5. win7 IE11卸载后无法上网
  6. 解决larave-dompdf中文字体显示问题
  7. JSON数组分配输出每个li
  8. ESXi主机管理内存资源的方式
  9. CLR Via CSharp读书笔记(7):常量和字段
  10. Apache OpenJPA 2.1.0 发布