前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >.NET映射设计(Model与UIControl之间的模型关系)

.NET映射设计(Model与UIControl之间的模型关系)

作者头像
王清培
发布于 2022-03-14 06:29:44
发布于 2022-03-14 06:29:44
6380
举报
文章被收录于专栏:王清培的专栏王清培的专栏

1:实体的使用范围和重要性

这篇文章讨论的概念其实比较简单的,但是在实际的项目应用中非常的重要和普遍。

我们的项目一般都是采用分层架构,有的三层有的可能五层或者其他的方式组织系统的架构,但是始终要将系统的架构按照模式设计,我们才能重用和接受维护。

随着ORM的流行和大面积的使用,行业内出现各种各样的ORM框架,有自己开发的有大型的软件公司开发的,基本在使用上都遵循了以实体为中心的概念,也就是围绕关系数据库中的表为操作对象。复杂的可能还包括连接查询多表操作等等。[王清培版权所有,转载请给出署名]

按照分层架构设计中的指导约束,我们应该尽可能的在系统模块之间采用Entity进行数据的传递。当然世事无绝对特殊性的项目可能没有这么简单,我们只讨论传统的信息系统项目。

我们看一下分层架构的数据传递。

图1:

这个图可能画的有点简单了,但是能说明大体的概念。

实体在层与层之间传递保证了很多因为Data Table数据传递带来的隐患。典型的就是Rows索引和Columns索引,在变动了DAL层的查询代码后就会将危险传递到BLL层、UI层。这样在给系统后期的维护提高了代价。

如果我们使用Entity传递数据就不会存在这些问题或者说问题变的轻了很多,当然这个需要项目开发过程中的编码约束了。程序员可能会习惯性的使用Data Table。

2:实体与界面的关系

大部分的系统都是需要将数据展现在界面上,然后在从界面上安全的搜集起来放到实体中进行增、删、改、查操作。这样的工作可能都是普通程序员在写或者是实习程序员在写,他们并没有意识到这样是重复的劳动。但是作为我们过来的程序员其实细心点的都会想到这之间是有联系的,可以适当的封装将大大减少开发效率。

我们看一下实体是如何赋值的:

图2:

这是我找的一个简单的代码段,就是将界面上的控件中的值赋到实体中去,然后在进行BLL的业务逻辑操作。

那么我上面的属性还算是少的,有的可能几十个属性都需要从界面上取值,并且是通过验证后的数据值。所以在开发上有两个地方确实很耗时,一个是数据的有效性验证,一个是数据的赋值。当然数据的赋值还有反向的,将实体中的值赋到控件中去,也很浪费时间。[王清培版权所有,转载请给出署名]

3:利用Model与UIControl之间的模型扩展基础框架

从上面所讲的问题,我们隐隐约约似乎明白点东西了。

我们先来看简单的封装。

1:首要的问题就是将控件进行二次封装,将输入控件与验证控件进行组合达到自动化验证数据的有效性,这样程序员在开发的时候能减少很多验证的代码,不用在去找一些正则表达式和使用各种各样的验证控件。

2:下面就是将控件与实体属性之间建立关联,这个关联有两个动作,一个是实体赋值到控件上,一个是控件赋值到实体中。我们先来说控件赋值到实体吧,控件赋值到实体,有一个比较重要的问题是数据类型,如何将控件中的值赋到属性中去,这个就跟实体的构造有直接关系了,实体的构造大部分是围绕着ORM的要求来的,那么如果你的ORM是采用比较传统的反射来对实体的数据进行赋值的话,那么这个实体就是孤立的,也只能使用反射来进行赋值。

其实我的想法是提高抽象层次将实体进行归类将实体的赋值拖入运行时,这样的好处很明显。(可以参见我的 “利用抽象、多态实现无反射的绿色环保ORM框架”一文)从ORM角度讲提高了性能,从大一点的角度讲可以借鉴领域驱动设计中的Module划分和大比例结构,将实体进行抽象后会变的很强大,如果能做到分层架构中合理的表现领域模型那就是绝对的厉害。

其实这里的数据类型就要靠程序员自己去判断了,是整形的就不能将控件的验证规则设成其他的。这样我们就可以根据实体的数据类型将控件的值进行安全转换(使用as)。

那么实体赋值到控件其实差不多的,根据控件的某种标识找到具体的属性然后设置就行了。[王清培版权所有,转载请给出署名]

我们看一下我写的一个小示例:

图3:

实体图

这个实体属性很多,由于时间关系我只使用两个属性做演示。

界面图

代码转换图

结:经过这样的封装我们确实减少了很多重复劳动,我也看到了这个效果是很明显的。这样一来就很平滑的将实体封装,送往BLL,然后再接受实体赋值到控件上。虽然简单,但是作用很大,可以适当的细化将数据表格控件进行封装,我想那个效果更明显。

上面是我在做基础库时的一点小小的经验,希望大家用的着。[王清培版权所有,转载请给出署名]

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-05-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.NETORM框架设计(利用抽象、多态实现无反射的绿色环保ORM框架)
最近一直在忙新公司的基础库建设,对系统架构、开发框架及快速开发平台的设计实施都积累了一定的实践经验。
王清培
2022/03/14
7740
.NETORM框架设计(利用抽象、多态实现无反射的绿色环保ORM框架)
.NET对存储过程的调用抽象封装
最近一边参与公司的项目开发,一边还肩负着基础库的创建和维护。真真切切的体会到写框架的不容易,写出好的,方便使用的框架更不容易,需要考虑的东西太多,需要掌握的东西太多。不过不要紧我们正在前进的道路上。同志们一起加油!
王清培
2022/03/14
6910
.NET对存储过程的调用抽象封装
.NET实现之(WebService数据提供程序)
说起数据提供程序大家都不陌生,数据提供程序的作用就是以统一的接口去访问不同的数据源,如OledbProvider、SqlServerProvider、OrcaleProvider等等;不同数据源的访问其实是不一样的,微软数据源的访问方式从ODBC到ADO.NET经历了很多路程,各大数据源提供商,都在不断的生产不同结构的数据库,为了以统一的接口去访问各种不同的数据源,微软的.NET为我们提供了ADO.NET,我们通过ADO.NET可以很方便的访问不同厂商生产的不同数据库,ADO.NET也为后期自定义数据提供程序规定了一套接口,只要我们自己去实现它就可以用同一种方式,访问我们自己的数据源,我们可以通过封装访问我们的XML数据源、文本数据源、二进制数据源、WebService数据源、对应用程序员来说,可能有很少一部分人去关注后台的具体实现的细节;对于刚毕业的学生来说,大部分的知识还没有转变成对技术的主观思考,刚刚接触数据提供程序可能有点陌生,所以我们尽可能的将复杂的东西进行简单化,让不需要接触后台代码的程序员就不要接触,减少思考的时间;
王清培
2022/03/14
5750
.NET实现之(WebService数据提供程序)
.NET面向上下文、AOP架构模式(概述)
上下文:其实就是一个逻辑上的业务、功能区域。在这个逻辑区域里可以有效的进行管理,算是一种制度的约束,也可以理解为某种范围类的数据共享。
王清培
2019/03/01
5860
.NET面向上下文、AOP架构模式(概述)
.NET实现之(WebBrowser数据采集—基础篇)
本人写博客总是喜欢来一段开场白,其实细心看我文章的朋友能明白我的意思,本人就是想让更多的人能理解我写文章的用意,力求用通俗易懂的方式展现复杂抽象的概念,写文章的朋友尤其是用心写文章的朋友,其实真正的目的不是写文章而是去帮助大家学习技术,在.NET领域里有各种各样的技术,一个人的精力有限,在讲解某一个技术要点的时候难免疏忽大意讲错,这很正常,我有时候在看一些前辈的文章时,总能发现前辈多么希望将自己毕生的经验、技术传递给每一个想学的人,他们是多么让我们敬佩,让我们值得尊重,我还是那句话,技术不是用来炫耀的,技术是我们生存的本领,更是我们兴趣的展现,做技术的朋友都是比较深沉、细心、敏锐的人,他们那不修边幅、胡须浓厚、满脸沧桑的背后都是刻苦专研技术细节所留下来的“伤疤”,我们看技术文章的时候要抱有一种谦虚、尊重和感谢的心态去阅读,尽量能在文章中学到东西,这也是每一个写文章的人的最终目的;我再此感谢那些无私奉献的前辈,你们辛苦了,你们已经到达了一种境界,一种不是最求技术的境界而是最求人生重大价值的境界,在你们那字里行间,我能感受到你们在写文章时的心情,也许你们在那多么恶劣的环境下抒写,有蚊虫的叮咬、蚂蚁的瘙痒、家人的不理解、小孩的抱怨、老婆的抱怨等等心里压力都是值得我们每一位写博客的朋友去虚心学习的;开场白就不在继续唠叨下去了,我们进入主题,今天我要讲的内容是通过一个简单的.NETWinform控件去抓取页面上的HTML代码中的数据,这种需求其实也不少,本人有幸在工作当中曾经开发过自动数据采集程序,大概的实现目标是这样的:要实现对HTML代码进行分析,然后抓取有规律的并且正确的数据,在此期间可能会碰到页面的跳转、页面的布局IFrame、异步AJAX等等不确定因素,也有博友问过我怎么实现的问题,可是这些东西三言两语讲不清楚,所以拖了很久,再次先说声不好意思,本人打算写出来让需要学习的人都能得到参考资料; 我们先来分析一下大概实现的思路,首先我们要明白,实现抓取页面上的数据其实就是将HTML代码拿过来进行分析,然后读取里面的数据,做过Winform程序的朋友可能很容易理解,在我们Winform控件库里有一个叫做WebBrowser的控件,其实这个控件是在浏览器的COM组件上进行了一层封装,让我们不需要去关注COM与.NET之间的互操作技术问题,有兴趣的朋友可以去研究研究,怎么注入HTMLDom对象数据;通过WebBrowser控件打开页面,我们就可以通过获取WebBrowser对象的Document属性拿到页面上的所有HTML代码,我们在借助于第三方的HTML代码分析组件进行分析,我推荐HtmlAgilityPack.dll给大家使用,使用方式跟XMLDom差不多;我们用一副图来整体的分析一下相关技术;[王清培版权所有,转载请给出署名]
王清培
2022/03/14
4510
.NET实现之(WebBrowser数据采集—基础篇)
.NET简谈特性(代码属性)
由于很久没有写关于基础知识的东西了,今天来总结一下关于.NET平台中的代码属性的概念;只是基础介绍,文章的本意是带领初学者学会使用特性,而不是讨论高深的底层技术;[王清培版权所有,转载请给出署名]
王清培
2022/03/14
3790
.NET面向上下文、AOP架构模式(实现)
在本人的.NET面向上下文、AOP架构模式(概述)一文中,我们大概了解了上下文如何辅助对象在运行时的管理。在很多时候我们急需在运行时能把对象控制在一定的逻辑范围内,在必要的时候能让他们体现出集中化的概念,如人群、车辆、动物等等。而Context与AOP有着密切的联系,Context表示逻辑抽象的范围而AOP描述了在这个逻辑范围内如何进行控制。其实这两者都是设计模式外的设计模式,与具体的技术实现无关。[王清培版权所有,转载请给出署名]
王清培
2019/03/01
7110
.NET面向上下文、AOP架构模式(实现)
.NET实现之(WebBrowser数据采集—终结篇)
我们继续上一篇".NET实现之(WebBrowser数据采集-基础篇)",由于时间关系这篇文未能及时编写;上一篇文章发布后,得来了部分博友的反对意见,觉得这样的文章没有意义,WebBrowser采集数据效率低下用WebRequest效率就能提高了,本人不理解,为什么同样是HTTP协议进行数据采集,效率能提高多少,在采集过程中同样要经历种种的高层协议向底层协议转换等过程,我个人感觉WebRequest是实现更多的扩展性,本人的WebBrowser数据采集,并不是谈抓取数据的效率,重点是讲解WebBrowser控件的原理,能用WebBrowser与HTML网页进行很方便的集成,本人的下一篇文章".NET实现之(WebBrowser数据采集-续)",就将用WebBrowser进行与HTML网页进行混合使用,在HTML的对象中我要在我的WebBrowser控件中通过读取数据库,将Winform的控件在HTML中进行呈现,然后将我们的Winform中的数据动态的填入HTML网页中;这样的人性化、方便性、模拟性我想是WebRequest所不能取代的,我们大部分的软件是要提供给用户使用的,有一个友好的用户界面是必须的;[王清培版权所有,转载请给出署名]
王清培
2022/03/14
6500
.NET实现之(WebBrowser数据采集—终结篇)
.NET实现之(简易ORM)
ORM模型在现在的项目开发中用的还是比较多的,他的好坏我们就不讨论了,已学习为主吧;
王清培
2022/03/14
6960
.NET实现之(简易ORM)
.NET简谈设计模式之(命令模式)
本篇要讲的是命令模式,其实命令模式也比较好理解,没有用到多高深的技术,也不需要多复杂的抽象。只需要我们脑海里能有一个大概的原型,等我们遇见类似问题的时候我们能通过巧妙的方式来解决。我们做应用层开发的大部分接触的都是一些模式、框架、思想等等,不像搞低层开发的,他们研究的可能多数是一些技术实现的问题,而我们是学习实现的方法论。应用层开发在技术的复杂程度上是有限的,在组合技术的实现上是复杂的。所以有一些.NET架构师确实比较厉害,他们能很早的就料到会出现什么问题,他们有很强的架构思想,对设计模式的掌握、对架构设计思想、对敏捷、极限等等都有了解,将它们化为一体,才能设计出非常漂亮的开发架构。[王清培版权所有,转载请给出署名]
王清培
2022/03/14
2260
.NET简谈设计模式之(命令模式)
.NET简谈设计模式之(单件模式)
今天要讲的是单件模式,其实单件模式是比较简单的设计模式,在我们日常开发过程中也是经常用到的。
王清培
2022/03/14
3410
.NET简谈设计模式之(单件模式)
.NET简谈面向接口编程
过程式的开发方式已逐渐退出大众的眼线,随之而来的是各种各样的高抽象的开发模式;我们不得不承认在没有设计模式的时候,我们很难总结出有价值的开发模型,便于以后重复使用和推广;面向对象的流行,让我们开发人员重新站在一个高的起点来看待软件模型,抽象固然是好事,但是也给初学者带来了迷惑,将软件中的东西都想成很简单的封装,我们只需要调用就行,这样越来越多的开发人员开始慢慢的往上“浮”[王清培版权所有,转载请给出署名],有一定编程经验和感触的人,能够明白我所说的“浮”,也算是给初学者提个醒吧;
王清培
2022/03/14
2970
.NET简谈面向接口编程
.NET深入解析LINQ框架(一:LINQ优雅的前奏)
LINQ简称语言集成查询,设计的目的是为了解决在.NET平台上进行统一的数据查询。
王清培
2019/03/01
2K0
.NET深入解析LINQ框架(一:LINQ优雅的前奏)
.NET简谈组件程序设计之(手动同步)
在上一篇文章“.NET简谈组件程序设计之(上下文与同步域) ”中,我们学习了关于一些上下文和同步域的概念,可以利用这两个技术来进行自动同步。
王清培
2022/03/14
2790
.NET简谈组件程序设计之(手动同步)
.NET简谈组件程序设计之(初识NetRemoting)
在本人的“.NET简谈组件程序设计之(初识远程调用) ”一文中,我们了解到什么是远程调用或者说在.NET平台上远程调用是什么样子的,可能和偏低层(Socket\Rpc)的远程调用有点距离。这只是系统为我们封装了假象而已,看不见不代表没有这逻辑,是为我们减轻了劳动负担。[王清培版权所有,转载请给出署名]
王清培
2022/03/14
3210
.NET简谈组件程序设计之(初识NetRemoting)
.NET简谈组件程序设计之(异步委托)
在我们正常使用的时候很少会去用异步委托技术来提高代码效率。委托的好处就是能对方法进行面向对象的封装,随意传递。在任何组件客户代码中都能对其进行调用,而不是传递方法对象的引用,这样能大大的降低代码的耦合。事件就是运用委托的优势进行对象的消息传递。。[王清培版权所有,转载请给出署名]
王清培
2022/03/14
4860
.NET简谈组件程序设计之(异步委托)
.NET简谈互操作(三:基础知识之DllImport特性)
我们继续.NET互操作学习,上一篇文章中我们介绍了托管代码怎么与非托管代码C++之间的互操作;要想在托管代码中成功的进行非托管调用,要注意的细节还是很多的,下面我们就来介绍一下,在互操作方面托管代码要注意的必不可少的代码申明,为我们下面的互操作打下基础;
王清培
2022/03/14
7490
.NET简谈互操作(三:基础知识之DllImport特性)
.NET简谈组件程序设计之(详解NetRemoting结构)
在本人的上一篇文章中只是简单的介绍了一下.NETRemoting的一般概念和基本的使用。这篇文章我想通过自己的学习和理解将对.NETRemoting的整体的一个框架进行通俗的讲解,其中最重要的就是信道(管道)处理模型思想,这里面蕴含了很多的设计原理。[王清培版权所有,转载请给出署名] .NETRemoting远程处理架构是一个半成品,是.NET给我们的扩展框架,要想用于商业项目必须进行一些安全、性能方面的控制。要想进行一定深度的扩展那就要必须了解它的整体结构,各个点之间的关系才能很好的控制它。
王清培
2022/03/14
4210
.NET简谈组件程序设计之(详解NetRemoting结构)
使用KTM(内核事务管理器)进行文件事务处理
在本人最近的几篇关于事务处理的文章中,从事务处理的整体概念到具体的C#代码的实践操作基本上都已经能满足日常的开发需求。文章中大部分的事务范围类的操作都是局限于数据库,在本人的“.NET简谈自定义事务资源管理器 ”一文中我虽然实现了一个简单的自定义资源管理器,其实也能满足基本的项目需求,核心功能也实现了,但是对于文件事务操作我们是力不从心的。[王清培版权所有,转载请给出署名]
王清培
2022/03/14
7390
使用KTM(内核事务管理器)进行文件事务处理
.NET简谈互操作(一:开篇介绍)
本人最近在学习非托管C++互操作的技术,有点小收获不敢私藏拿出来跟大家分享;作为.NET开发人员,我们有必要学习一些互操作方面的知识;尤其对一些高级程序员来说,掌握非托管的互操作能很好的增加我们的技术竞争力;由于互操作的内容很多,我打算用系列来讲,这篇就当是随便唠叨做入门介绍吧;
王清培
2022/03/14
3260
.NET简谈互操作(一:开篇介绍)
相关推荐
.NETORM框架设计(利用抽象、多态实现无反射的绿色环保ORM框架)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文