思维的新发展

原来不知道自己想要什么,一般习惯于三层,而且还是bll简单化的三层,现在是越来越清晰的明白自己想要什么了。

简单化的三层存在的问题:

1.表驱动的,N个表,就有N*3个类。

2.业务全部被放到了界面后面隐藏的类里面去了。换界面不容易。

3.业务复杂的话,修改起来比较崩溃。比如说一个业务有5个表参加了,那么里面的业务代码长,复杂,表的关系也是复杂。绕来绕去头晕了。

修改起来也是小心异常。

原来打算使用DDD驱动,但是这个东西,首先要有业务专家,分析起来头大,水平不够就算了。所以就选用了csla.net。

最后参加了几个复杂一些的项目。我发现,我只需要这样三个东西来做业务:

1.业务类,应该是UI对应的类,而不是简单的D2O,O2D的传输类。它的属性要更符合业务字段(其实是用户接口或者叫UI)的类。比如说,文章里面有一个叫类型的属性,

两种方式,传输类,只有类型的编号,传输类,引用了类型。我想用第三种,将类型的名称也放到传输类里面,

从业务上面来看,文章本来就有一叫类型的属性,用户接口里面用的就是名称,只有程序员才知道用编号。

在有一些简单系统里面可能就只有一个叫类型的属性,它只有一个字段。

2.上下文,应该叫表达式吧。以往的编码,刚入行时,人家告诉我们说,根据名称获取某条信息,你要写...ByName,根据ID获取某条信息,你要写...ByID,

最后你要重载一个,好多参数的方法,或者是参数类的方法。所以一个BLL里面一大堆方法下来。不如一个方法。用表达式来做参数。更加清晰明了。而且一般的

表达式,你不用特殊的解析,前面UI对应的类做好了,后面的查询一般都在UI里面有了。不需要做特别的处理。有一些特别的规则,比如说,状态为true,才能用,

这个可以默到表达式里面。还有环境上下文,当前用户相关的环境上下文【数据权限、业务权限】等。

3.UI辅助类。帮助业务逻辑与UI交互,在做很多业务的时候,会有,你是否。。。。。,是,否的询问,为了这个交互,只好把业务放到了UI的后台类里面,这是正确的,

但是不好看。而且写程序不能像写文章那样,一气呵成,中间,会被这个交互打断了,【一般是从winform到webform或者是mvc的时候】。

UI的逻辑本身比较复杂。但是在业务中使用的,大体上面,只有树,树列表,列表,工具栏,下拉菜单,连动选择控件,输入限制控件,而且如果是做业务系统,UI一般,

风格比较固定,所以统一是可行的。

此时UI可以由一个人做,业务由另一个人做,统一的接口是UI辅助类。业务通过特性指定UI的类型。UI的外观,由另一个人处理,圆的按钮,方的按钮,怎么放。写到模板里。

博客园真的是让人成长,这些思维也不是乱想的,oea的UI就是这样的。csla在数据门户上体现一种,数据操作也是业务的一部分,某人写的POCO真的那么重要吗,我看到了上下文,

表达式的好处,接合csla,这个是真的可以特别的灵活。从csla上,我看到了UI和业务类的统一。以往我看oea的方式,我觉得复杂,不灵活,难用,现在,我还不会用,

但是,我觉得是用这种方式在做业务的时候真的变的简单了,以往我会被打断,这个查询没有写,赶快去BLL,DAL里面加。这个放在这不行,因为要和用户交互,没有引用到UI的框架,

然后copy,past。一个UI后台类,写到上万行,很正常。无所保证其完全正确,写单元测试,写不了,很正常。

虽然不是唯一的开发方式,但对我来说,是比较合适我的开发的。

题外话,如果不是csla和oea开源还有很多人分享他们的思路和源码,那么我现在应该积极的去做管理了,这种工作多好,

跟领导吹吹牛,侃侃大山,压力来了,分给下面的人,哪有什么压力。有功自己领,拿点汤给别人,有错,下面人的问题。

转载于:https://www.cnblogs.com/forhell/archive/2013/05/25/3098521.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring支持的事务管理

1、编程式事务: 需在spring.xml配置文件中, 1、配置数据源、 2、持久化模板(jdbc模板、hibernate模板、mybatis模板)、 对象里面注入的是数据源及框架的属性配置; 3、需编写事务管理器 transcationManager, 对象里面注入的是数据源…

【RK3399Pro学习笔记】二、Thinker Edge R 内网穿透以实现远程SSH

目录免费方案花生壳下载安装添加内网穿透映射测试平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本:Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 因Thinker Edge R安装的镜像为64位的版本 getconf LONG_BIT免费方案 花生壳 下载 在花生壳下载…

第14章:傅里叶变换

第14章:傅里叶变换一、理论基础:二、Numpy实现傅里叶变换:1. 实现傅里叶变换:2. 逆傅里叶变换:3. 高通滤波示例:三、OpenCV实现傅里叶变换:1. 实现傅里叶变换:2. 实现逆傅里叶变换&a…

代码能不能不要写得这么烂?!

我是一个研二的即将实习和毕业的普通屌丝研究生,带着几个研一的同学一起做数据挖掘项目。为了在毕业的时候防止青黄不接导致老师不让我毕业,于是从他们刚进实验室起,就“开始了设计模式和代码风格的培养”。具体的做法,就是扔给他…

MYSQL jdbc autoReconnect

http://blog.csdn.net/a9529lty/article/details/7104351 http://blog.163.com/huangfei_person/blog/static/58156675201092911507809/转载于:https://www.cnblogs.com/rgqancy/p/7097916.html

【Kali 树莓派版学习笔记】安装系统和VNC服务

目录下载固件和烧录系统第一次开机SSH连接换源设置语言安装VNC平台:树莓派3B 版本: Linux kali 5.4.83-Re4son-v7 #1 SMP Sat May 15 03:22:58 UTC 2021 armv7l GNU/Linux 下载固件和烧录系统 Get Kali 格式化TF卡 使用Win32DiskImager刷入镜像 第…

第15章:模板匹配

第15章:模板匹配一、模板匹配基础:1. cv2.matchTemplate()函数:2. 匹配原理:3. 查找最值:二、多模版匹配:1. 获取匹配位置集合:2. 循环:3.调整坐标4.标记匹配图像的位置​ 模板匹配是…

GridView 移除模板列

protected void gvMain_ItemDataBound(object sender, DataGridItemEventArgs e) { if (e.Item.ItemType ListItemType.AlternatingItem || e.Item.ItemType ListItemType.Item) { e.Item.Cells.RemoveAt(0); } } 转载于:https://ww…

事件处理机制--浏览器流程处理分析

事件处理机制--浏览器流程处理分析 js的运行是单线程的,单线程即一个时间只能做一件事。浏览器的运行是多线程的。 如下三种情况会进入事件队列(任务队列)中,但不立即执行: 1.定时函数 2.事件函…

第16章:霍夫变换

第16章:霍夫变换一、霍夫直线变换:1. 霍夫直线变换原理:2. HoughLines函数:3. HoughLinesP函数:2. 霍夫圆环变换:霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用类似于投票的方…

一个java处理JSON格式数据的通用类(三)

/** *//** * 从json数组中解析出java Integer型对象数组 * param jsonString * return */ public static Double[] getDoubleArray4Json(String jsonString)...{ JSONArray jsonArray JSONArray.fromObject(jsonString); Doubl…

【树莓派学习笔记】九、C语言寄存器操作控制GPIO

目录CPU型号确定寄存器的地址问题GPIO寄存器GPFESLnGPSETnGPCLRn重要函数mmap函数munmap函数点灯程序平台:树莓派3B 版本: 2021-05-07-raspios-buster-armhf CPU型号确定 由 pinout命令可知,所用的板子Soc型号为BCM2837 寄存器的地址问题…

bzoj2527

首先环可以变成链来处理,对于l>r的情况就是修改区间[1,r],[l,mx]然后不难想到整体二分,二分答案k,然后算1~k场流星雨对国家的贡献然后判定将国家划分变成子问题解决,没什么难的终于不是tle,poi良心了一把 1 type wayrecord2 …

第17章:图像分割提取

第17章:图像分割提取一、用分水岭算法实现图像分割提取:1. 算法原理:2. 相关函数介绍:(1) 形态学函数回顾:(2) 距离变换函数distanceTransform:(3) 确定未知区域:(4) 函数connectedComponents对…

Linux虚拟机安装应用程序提示Graphical installers are not supported by the vm

Linux安装应用程序提示Graphical installers are not supported by the vm 参考链接:http://www-01.ibm.com/support/docview.wss?uidswg21462180 Technote (troubleshooting) Problem(Abstract) Attempts to install IBM Security AppScan Source on Linux result…

[转]可伸缩系统的架构经验

最近,阅读了Will Larson的文章Introduction to Architecting System for Scale,感觉很有价值。作者分享了他在Yahoo!与Digg收获的设计可伸缩系统的架构经验。在我过往的架构经验中,由于主要参与开发企业软件系统,这种面向企业内部…

【Linux技巧】cmake、make命令多线程编译,大大提高编译速度

目录获取最大可用线程数自动以最大线程数编译makecmake效果系统:Debian 获取最大可用线程数 nprocnproc命令可返回当前可用的最大线程数 树莓派3B (BCM2837):4 RK3399 Pro:6 自动以最大线程数编译 make sudo make -j $(nproc)cmake su…

[转帖]鲍鹏山:我们培养了很多高学历的野蛮人

按:我的理解,鲍老师的讲演有下面五重意思: 1.集中精力研究有意义的问题,而不应该刻意掌握一些无实际意义的知识。“我之所以这么聪明,是因为我从来不在不必要的事情上浪费精力--尼采” 2.为了获得别人的羡慕钦佩去掌握…

redis学习(九)——数据持久化

一、概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的。所以,我们需要将内存中的数据持久化!典型的需要持久…

粘贴复制Android复制和粘贴的实现

最近研究粘贴复制&#xff0c;稍微总结一下&#xff0c;以后继续补充&#xff1a; main.xml如下: <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width&quo…