惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
Google Developers Blog
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
P
Proofpoint News Feed
博客园 - 【当耐特】
MongoDB | Blog
MongoDB | Blog
L
LangChain Blog
F
Fortinet All Blogs
C
Check Point Blog
博客园_首页
I
InfoQ
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
美团技术团队
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 生命体验之kevin-Y

windbg内存占用分析常用命令 如何让Trae IDE调用windbg来分析dump文件 Avalonia.Controls.DataGrid自动合并列 asp.net core如何实现Controller热更新 windbg无法分析dotnetframework3.5的dmp asp.net core通过配置决定AddSingleton的实现类 vscode指定python文件的执行程序 golang离线开发-windows-vscode go语言学习 - caddy配置的一些发现 go语言学习 - caddy添加nacos-gateway 学习jsp-使用IDEA2024社区版 ravendb源代码学习一:服务启动 修整程序集需要 .NET Core 3.0 或更高版本。 打开电脑后一直弹出“交互式检测服务”窗口 Idea2024-java-Maven开发配置 C#获取事件绑定的方法 java.util.zip.DataFormatException: incorrect header check Build Secure Web Services With SOAP Headers and Extensions “System.Net.Http.HttpContent”不包含“ReadAsAsync”的定义 C#入门:如何合理制定方法参数-上 拷贝对象的开源工具类-FastMapper-TinyMapper-Mapster
C#入门:如何合理制定方法参数-下
生命体验之kevin-Y · 2023-10-27 · via 博客园 - 生命体验之kevin-Y

在上一篇中:https://www.cnblogs.com/kevin-Y/p/17792071.html

我们将程序组成为三个主要对象:字段、查询范围、行为控制器。

字段、查询范围都是数据,都分别对应一个类,有各自属性,并能保存和读取

行为控制器则是一个接口,有N种实现类,每一种类型的字段就有一种实现类

   public interface IFieldController
   {
       /// <summary>
       /// 处理的字段类型
       /// </summary>
       string HandleType { get; }
       /// <summary>
       /// 获取查询范围编辑器
       /// </summary>
       /// <param name="field"></param>
       /// <param name="condition"></param>
       /// <returns></returns>
       Control BuildFieldEditor(FieldItem field, string condition);
       /// <summary>
       /// 读取查询范围
       /// </summary>
       /// <param name="ctrol"></param>
       /// <returns></returns>
       ConditionItem ReadCondition(Control ctrol);
       /// <summary>
       /// 生成where条件
       /// </summary>
       /// <param name="build"></param>
       /// <param name="field"></param>
       /// <param name="condition"></param>
       void BuildWhere(SqlBuilder build, FieldItem field, string condition);
   }

在我们划分好主要对象后,上面方法及其基本上可以确定下来。为什么这么说呢?如果我不能确定该如何做呢?我以这个例子说明我们以何为依据。

1。主程序不需要清楚有多少种类型的字段,只需要工厂方法告诉其控制类是谁

2。所有与类型有关的东西,主程序也不会理会,所以接口出入参只会是主程序知道的某一些基类或接口。
如BuildFieldEditor方法的入参condition,使用了基本的字符串作为所有查询范围的描述载体。显示的界面需要自己解释这个文本再给界面各个控件赋值。
为什么使用string,而不使用object呢?主要是确保能让主程序保存到本地文件中。

3。方法入参不会一下子就能明确下来的。可能需要完成第一个、二个控制器才能基本确定。
如BuildWhere方法的入参SqlBuilder build,一开始我想使用一个StringBuilder就行了。但做完第一个Int类型的控制器、准备做第二个String类型时,
发现几乎所有代码都一样。于是将这些代码组织了一个工具类SqlBuilder。大家可以将入参调整为StringBuilder试试。

4。类似功能、或相关功能应放在一个类中。如读、写应该在一个类;序列化和反序列化也应该在一个类。

5。在上线前要勇于调整方案,力求代码精减、职责清晰(重点:如果不知道对面对象的单一职责原则,请搜索学习一下

点击下载相关代码

本文只发布在博客园,未经同意请勿转载!