首页 > 编程语言 >C#入门:如何合理制定方法参数-下

C#入门:如何合理制定方法参数-下

时间:2023-10-27 14:49:04浏览次数:35  
标签:主程序 SqlBuilder 入门 C# 控制器 查询 参数 condition string

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

点击下载相关代码

 

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

标签:主程序,SqlBuilder,入门,C#,控制器,查询,参数,condition,string
From: https://www.cnblogs.com/kevin-Y/p/17792258.html

相关文章

  • Oracle的性能优化
    Oracle性能优化Oracle性能优化就是通过合理安排资源、调整系统参数使Oracle运行更快、更节省资源。Oracle性能优化包括查询速度优化、更新速度优化、Oracle服务器优化等。1.优化简介优化Oracle数据库是数据库管理员和数据库开发人员的必备技能。Oracle优化,一方面是找出系统......
  • PCB封装命名规则,本文转载https://www.xjx100.cn/news/432127.html?action=onClick
    SO、SOP、SOIC、MSOP、TSSOP、TSOP、VSSOP、SSOP、SOJ封装详解 1. 简要信息如下: 2.SOP和SOIC的规格多是类似的,现在大多数厂商基本都采用的是SOIC的描述:SOIC8有窄体150mil的(外形封装宽度,不含管脚,下同),管脚间距是1.27mm,如下:有宽体的208mil的,管脚间距是1.27mm,如下:......
  • acwing318 划分大理石
    有价值分别为1..6的大理石各a[1..6]块,现要将它们分成两部分,使得两部分价值之和相等,问是否可以实现。其中大理石的总数不超过20000。输入格式输入包含多组数据!每组数据占一行,包含6个整数,表示a[1]∼a[6]。当输入为000000时表示输入结束,且该行无需考虑。输出......
  • JavaScript 数组存储方式及对象
    一、数组的存储1、当声明一个变量时,vara=111;在后台计算机翻译时,var声明a变量所以此时会产生一个栈内存,变量a的初始值为undefined,然后=111;undefined消失,111的值被赋值给了a。如果多个变量赋值的话,栈内存的执行顺序是先进后出的顺序。也叫做压栈。栈内存属于基础数据......
  • pytorch(11.2) Transformer 代码
         ......
  • 借助Navicat实现将mysql表结构转表格
    借助Navicat实现将mysql表结构转表格SELECTCOLUMN_NAME列名,COLUMN_TYPE数据类型,DATA_TYPE字段类型,IF(IS_NULLABLE='NO','否','是')是否为空,COLUMN_DEFAULT默认值,COLUMN_COMMENT备注FROMINFORMATION_SCHEMA.COLUMNSWHEREt......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控
    在我们窗口新增、编辑状态下的时候,我们往往会根据是否修改过的痕迹-也就是脏数据状态进行跟踪,如果用户发生了数据修改,我们在用户退出窗口的时候,提供用户是否丢弃修改还是继续编辑,这样在一些重要录入时的时候,可以避免用户不小心关掉窗口,导致窗口的数据要重新录入的尴尬场景。本篇随......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(4) -- 实现Da
    在我们设计软件的很多地方,都看到需要对表格数据进行导入和导出的操作,主要是方便客户进行快速的数据处理和分享的功能,本篇随笔介绍基于WPF实现DataGrid数据的导入和导出操作。1、系统界面设计在我们实现数据的导入导出功能之前,我们在主界面需要提供给客户相关的操作按钮,如下界面所示......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表
    在我们展示一些参考信息的时候,有所会用树形列表来展示结构信息,如对于有父子关系的多层级部门机构,以及一些常用如字典大类节点,也都可以利用树形列表的方式进行展示,本篇随笔介绍基于WPF的方式,使用TreeView来洗实现结构信息的展示,以及对它的菜单进行的设置、过滤查询等功能的实现逻辑......
  • 使用vscode编译python
    使用vscode编译python1.需要提前安装python,vscodewin10安装python32.在vscode中安装Python插件a.在vscode中高效率的编辑Python代码,需要安装Python插件,点击图1中红框内的按钮b.在左上角的搜索框中输入:Python,如图2所示,点击图2中红框内的按钮安装插件,点击后红框内的......