在实际WPF项目中,可能会遇到非常复杂的数据绑定情况,本文针对一些常见情况,归纳出简单易用的数据绑定方法。
本着同步理解.NET和Spring框架核心理念的原则,来到ORM框架这个话题。.NET的ORM框架可谓繁荣,有轻量级的Dapper,有大名鼎鼎全能无敌的EFCore;在Spring中,比较流行的ORM框架包括MyBatis和Hibernate,前者与Dapper接近,后者是Spring Data JPA标准的一个流行实现,功能强大与EFCore能有一战。
要想深入掌握Hibernate,需要同平时项目结合起来一起学习,本文以一个非常简单的实例一窥Hibernate的精妙!
面向切面编程(Aspect Oriented Programming, AOP)的概念非常简单,它把系统的一些非业务功能(如日志记录、性能监控、事务管理等)从业务代码中剥离出来定义成切面,再把这些切面作为对业务代码的增强。降低了非业务功能对业务代码的侵入,进一步降低了两者的耦合程度。
控制反转(Inversion of Control,IoC)是一种设计原则,它把创建和管理类对象的控制权从调用者转移到框架容器中。事先在框架容器中注册各种类对象,由框架容器统一负责类对象的创建、装配和管理;调用者无须显式创建类对象,只需声明使用即可。在这里,类对象就是服务。IoC进一步实现了各模块之间的解耦,充分体现了技术人在“高内聚、低耦合”设计方向上的不懈追求!
依赖注入(Dependency Injection,DI)是实现IoC的最流行方式,被各大技术框架所采用。
本文详细介绍.NET框架的DI用法,并给出一个Spring框架的DI示例用以对比。
在WPF中,有许多数据校验方法,ValidationRule、IDataErrorInfo和DataAnnotations是三种最常用的方式,本文对其用法做一个简单介绍。
在实际项目开发中,推荐使用IDataErrorInfo + DataAnnotations的方案!
“实时预览”是指用户在没点击鼠标确认输入点之前,CAD能根据鼠标位置绘制此刻的图元。当用户点击鼠标确认时,最终图形被确定,Jig过程停止;当用户取消Jig操作时,没有任何图元被最终绘制。采用Jig技术实现图元实时预览,可以将图元绘制过程中任一时刻的形状反馈给用户,供用户做下一步移位决策。
Jig技术基本是自定义实体的标配,也象征着自定义实体具备较强的交互性。下文讲解Jig的具体实现。
如果自定义实体在AutoCAD中处于选中状态时,属性面板能够显示其属性并供用户修改,那么用户与自定义实体的交互性将得到极大提升,这在实际工程中是非常实用的!天正系列软件内置大量自定义实体,并且供用户修改属性驱动,其技术核心就是COM封装。
本文逐步讲解如何对自定义实体进行COM封装。
各种技术和框架层出不穷,如何在眼花缭乱的技术世界中抓住本质,我有一些思考!
在进行CAD二次开发的技术选型时,建议主体使用.NET技术栈(.NET生态丰富,开发效率较高);当涉及自定义实体等高级功能时,可以切换到C++技术栈,并且用CLI混合编程方式对其进行封装供.NET项目使用。这样就可以兼顾开发效率和功能两个因素了!
在创建自定义实体(详见:自定义实体的创建和使用)的基础上,如何对自定义实体进行CLI封装,请看下文!
下一篇文章将讲解如何使用COM技术封装自定义实体,从而为自定义实体添加属性面板,这可以给用户提供修改自定义实体属性的界面接口,非常实用,敬请期待!
自定义实体被视为高阶CAD二次开发的象征,很多招聘信息上都明确标注“熟悉自定义实体开发者优先”的字样,其重要性可见一斑!
一直以来,CAD二次开发的主要工作就是通过程序在模型空间绘制各种基本图元,从而实现辅助成图。在这种情况下,即使在业务上密切相关的图元,其在图纸上也是离散的,开发者和用户无法将其视为一个整体进行绘制或调整,封装性仅仅体现在绘图函数这一等级。
如果将这些密切相关的图元形成一个逻辑整体(即自定义实体),有什么好处呢?①可以实现更有意义的封装:无论绘图逻辑多么复杂,它永远被封装在自定义实体内部,调用者只需要向其传递关键数据就能驱动图形绘制和变化,这就是典型的”高内聚低耦合“;②增加用户交互性:自定义实体可以暴露操作接口给用户,用户可以更加灵活地调整图形;③规范业务逻辑:自定义实体的制定过程就是业务分解的过程。在我看来,自定义实体不只是一种技术,更是一种思维。
本文先介绍如何创建并使用自定义实体,在学习自定义实体的过程中,你将领略到AutoCAD系统的博大精深!
下一篇文章将讲解如何使用CLI技术封装自定义实体供.NET项目使用,这在大型CAD插件系统中非常实用,敬请期待!