【C#编程最佳实践 五】项目与代码流程实践

简介: 【C#编程最佳实践 五】项目与代码流程实践

本篇博客来源于目前编写的一个小插件,简单来说,就是某个库里的某张表里的某条数据被迁移到该表里另一个位置,通过传入两个不同的id来校验迁移是否成功。在这个过程中获取了不少实践知识,概括起来集中在以下两个方面:第一个来自于实现流程,到底该怎样设计才能实现功能。第二个来自于代码:如何调用合适的实现方法(一种是字典,一种是工厂类),如何封装合适的替代类。第三个来自于配置文件:如何编写合适的xml文件,并且解析出来。后续如果博主能接触到更多的设计方式,也会持续更新。

检测数据迁移插件实践

实际场景

两种模式,一种是当作工具使用,这就需要遍历整个库的每张表,在每张表内依据两个用户id来获取两张子表,拿到后进行比较,以此类推,第二种是当作业务操作来做,我想选几条对比就对比几条。目前只做第一种模式的操作。

整体设计

数据范围

对应于两种模式,有不同的数据范围,就得预留不同的方法处理不同的场景。

数据匹配

面临困难1:拿到两张子表后条数和顺序很大概率不同,所以难以对应

解决方案1:获取特征码的方法:

1,通过valueMapping获取映射拼接 id1–id2

2,通过xml配置某些字段为特征,表名和该字段集合特征拼接为特征码 table–字段名集合

面临困难2:表里不一定有Application这个字段

解决方案2:在表里配置关联外键属性,拼接sql作为查询条件。因为每次迁移都针对某一个应用,所以需要应用名——为了使用应用名不同的表采用不同的方式(1,application或者applicationcode这种有类似应用名字段的。2,使用外键和其关联的表) 。将条件当作字符串传进去

数据对比

面临困难:不同字段的对比规则可能不同

解决方案:针对不同字段对比规则不同的问题,可以在配置的时候指定对比规则

具体工作

数据获取层面

写对应的存储过程,得到需要的数据

代码处理层面

1,要封装合适的类来重新封装从数据库中获取的数据,便于使用

2,对应不同的特征码获取方法,要写出通用的方式和各自的实现形式

3,对应于不同的字段匹配规则,要写出通用的方式和各自的实现形式

xml文档编写层面

要设计出符合要求的xml文档,这样才能发挥其匹配的作用

代码编写流程

文件结构设计

主体结构首先设计好,事半功倍。

1,首先考虑我需要有不同的匹配规则,所以我需要有匹配规则的接口和实现类,我还有不同的创建特征码的方式,所以也需要对应的接口和实现类。

2,考虑实体设计,我需要从库,表,字段三种不同级别创建对比信息结果封装类,为了重新封装数据表,我又需要准备重新封装的类,还有一个就是传入参数的一个封装(这里说一下,对于有可能变化的传入参数,不如把这几个参数封装成类,这样扩展起来非常方便)

3,除了编写xml文件,当然xml解析类也是必不可少的了,把它放到配置文件夹里

4,当然,最核心的就是对外服务提供类

5,正如前几篇提到的,测试驱动开发,测试类入口当然要提前准备好

核心流程

这里不再赘述配置文件,配置文件解析类,等代码的编写,主要讲下核心的流程如何走

主体部分不涉及任何逻辑结构,细分功能都调用辅助方法来实现这是我此次代码编写中得出的最大的结论,这样可以让你迅速把握主体,不会太乱。而辅助方法也按照主体的调用顺序按顺序编写,这样能让代码清晰,阅读体验非常好

相关文章
|
1月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
36 3
|
4天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
33 12
|
1月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
52 4
|
7月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
218 3
|
7月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
210 3
|
3月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
52 2
|
2月前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。
142 0
|
3月前
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
84 11
|
3月前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue<T>`和`ConcurrentDictionary<TKey, TValue>`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
57 1