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

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

点击下载相关代码

 

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

posted @ 2023-10-27 14:29  生命体验之kevin-Y  阅读(9)  评论(0编辑  收藏  举报