项目任务管理(TaskMgr)设计篇
为什么使用void FilllXX(TypeA pParm1, TypeB pParm2)
应用场景色:void FillXX的好处是可以不用关心实例情况;如果在方法体中需要一个实例,而方法体只知道基类,无法提供继承类的实例,那么就需要外界出入子类的实例,来进行填充,从而实现了对某些操作的“闭”;
比如早期在DataAccesor中的:
public static BaseBizEntity FillBizDataByID(int pID, BaseBizEntity pBizEntity)
{
…
context.TryGetObjectByKey(key, out o);
Util.DataEntityToBizObjTrans((EntityObject)o,
pBizEntity
);
…
}
因为这里牵涉到将获取的Entity向业务Entity进行赋值,这个时候方法体是不知道业务实体具体类型的,无法实例化,所以只能依赖参数传递,这个就是void FillXX(TypeA pParm1, TypeB pParm2)的应用场景;
UtilLib的应用
对于高层抽象一定要封装在一起,比如基类的使用;这样最大的好处就是以后新的工程项目,子类是不相同的,相同的倒是高层抽象;比如BaseService,BaseBizEntity等等,新的项目来了,只需要把UtilLibrary加入工程,就有的框架可以遵循了。
主表和自表联动插入的方式
对于一对一的关系,外键放在任何一个表中都可以,对于一对多的情况,外键毫无疑问的应该放在从表中;对于ROMapping模式的开发,关联的处理方式,则是主表一定要先插入DB,因为需要返回主键,作为从表的外键,这里可以在程序中做一下校验,如果没有主键做外键,那么就直接抛出异常:
public void Add(BizWorkflowSequeuece pNode)
{
if (this.Id == 0)
{
throw new Exception("工作流实例为空,不能添加节点");
} pNode.WfId = this.Id;
this.nodes.Enqueue(pNode);
pNode.StepNo = this.allNodes.Count + 1;
pNode.Create();
}
日志的设计
日志一定是要讲求“一条龙”,通过日志是可以将操作的一条线体找到的;比如从创建一条任务,业务类,到保存到DB,再到创建一条工作流,保存到DB,添加到业务类;最后是添加节点,每添加一个节点就会存到DB中;一个任务的创建应该是一个主线,通过ID是可以追踪到整条线的。
枚举的滥用
首先,不要将枚举值和下拉框相关,而是最好配置DB化,并提供配置页面来进行配置;这样对于增加、减少项可以达到不修改代码即可,如果枚举和下拉直接相关:将会导致变更以来代码。
其次,枚举不要作为Entity的类型,DB的字段向Entity转化,以及做处理在页面端显示其实是一件特别扯淡的事情;
最后,要明白,枚举只是一种表达方式,一种只适用于应用层处理逻辑的直观性,便利性,但是不要将他穿插跨域方面(应用层、DB层)。
为什么消息都放在一个类中
提示消息统一放在一个类中,这就是集中效应;所有同类别的内容都放在一起,这样便于索引,便于发现类似的内容,进而加以简化,比如可以方便发现相同的消息;另外如果修改可以尽快定位到修改点。
项目任务管理(TaskMgr)设计篇的更多相关文章
- 项目结构的设计(iOS篇)
项目结构的设计(iOS篇) 本文附带源码:YoungHeart-Chapter-02.zip 在设计任何一个框架之前,都应规划好项目结构. 假定Git作为我们的项目管理工具.我们要建立两个仓库,一个用 ...
- .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
写在前面 这篇我们对用户权限进行极简设计并保留其扩展性.首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core.ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解 ...
- .NET Core实战项目之CMS 第十章 设计篇-系统开发框架设计
这两天比较忙,周末也在加班,所以更新的就慢了一点,不过没关系,今天我们就进行千呼万唤的系统开发框架的设计.不知道上篇关于架构设计的文章大家有没有阅读,如果阅读后相信一定对架构设计有了更近一部的理解,如 ...
- jQuery2.x源码解析(设计篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 这一篇笔者主要以设计的角度探索jQuery的源代 ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- 《一头扎进》系列之Python+Selenium框架设计篇3- 价值好几K的框架,狼来了,狼来了....,狼没来,框架真的来了
1. 简介 前边宏哥一边一边的喊框架,就如同一边一边的喊狼来了!狼来了!.....这回是狼没有来,框架真的来了.从本文开始宏哥将会一步一步介绍,如何从无到有地创建自己的第一个自动化测试框架.这一篇,我 ...
- 《一头扎进》系列之Python+Selenium框架设计篇4- 价值好几K的框架,呵!这个框架有点意思啊
1.简介 前面文章,我们实现了框架的一部分功能,包括日志类和浏览器引擎类的封装,今天我们继续封装一个基类和介绍如何实现POM.关于基类,是这样定义的:把一些常见的页面操作的selenium封装到bas ...
- 《一头扎进》系列之Python+Selenium框架设计篇5 - 价值好几K的框架,哎呦!这个框架还真有点料啊!!!
1. 简介 其实,到前面这一篇文章,简单的Python+Selenium自动化测试框架就已经算实现了.接下来的主要是介绍,unittest管理脚本,如何如何加载执行脚本,再就是采用第三方插件,实现输出 ...
- 《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
1.简介 从这一篇开始介绍和分享Java+Selenium+POM的简单自动化测试框架设计.第一个设计点,就是支持跨浏览器测试. 宏哥自己认为的支持跨浏览器测试就是:同一个测试用例,支持用不同浏览器去 ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇三:Access远程连接数据库和窗体打包部署
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
随机推荐
- com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。”
检查SQL Server Configuration Manager 确定实例名为"SKYSQLEXPRESS"下的TCP/IP已经开启了: sql2014配置(系统为Window ...
- 一个表的两个列连接另外一个表的一个列SQL语句怎么写
f619424517 | 浏览 2207 次 推荐于2016-09-09 11:38:18 最佳答案 select a.flightid,a.flightname,b.cityname,c.c ...
- 不同车型 不同起步价不同费用的问题(switch语句)
#include "stdio.h" #include "math.h" main() { int a; float meet,b; printf(" ...
- c#委托和事件(下) 分类: C# 2015-03-09 08:42 211人阅读 评论(0) 收藏
C#中的委托和事件(下) 引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识.但那些远不是委托和事件的全部内容,还有很多的地方没有涉及.本文将讨论委托和事件一些更为 ...
- ORACLE EXP命令
本文对Oracle数据的导入导出 imp ,exp 两个命令进行了介绍, 并对其对应的參数进行了说明,然后通过一些演示样例进行演练,加深理解.文章最后对运用这两个命令可能出现的问题(如权限不够,不同o ...
- javascript 的基本优化
http://www.ruanyifeng.com/blog/2010/01/12_javascript_syntax_structures_you_should_not_use.html
- wdlinux mysql innodb的安装
mysql innodb的安装 wget -c http://down.wdlinux.cn/in/mysql_innodb_ins.sh chmod 755 mysql_innodb_ins.sh ...
- sqlserver 数据行统计,秒查语句
1.传统统计方式 ...
- [Reactive Programming] RxJS dynamic behavior
This lesson helps you think in Reactive programming by explaining why it is a beneficial paradigm fo ...
- Qt 学习之路:线程总结
前面我们已经详细介绍过有关线程的一些值得注意的事项.现在我们开始对线程做一些总结. 有关线程,你可以做的是: 在QThread子类添加信号.这是绝对安全的,并且也是正确的(前面我们已经详细介绍过,发送 ...