方法多少个参数才算多!
小弟有这样一个方法,按页大小和页索引查询产品,如下。
/// <summary> /// 获取产品 /// </summary> /// <param name="manufacturerID">厂商ID,为null时不做查询条件。</param> /// <param name="categoryID">类别ID,为null时不做查询条件。</param> /// <param name="typeID">类型ID,为null时不做查询条件。</param> /// <param name="name">产品名称,模糊匹配。</param> /// <param name="description">描述,模糊匹配。</param> /// <param name="pageSize">页大小</param> /// <param name="pageIndex">页索引</param> /// <returns></returns> public DataTable GetProduct(int? manufacturerID, int? categoryID, int? typeID, string name, string description, int pageSize, int pageIndex) { ...... }
public class QueryProduct { private int? manufacturerID; /// <summary> /// 厂商ID,为null时不做查询条件。 /// </summary> public int? ManufacturerID { get { return manufacturerID; } set { manufacturerID = value; } } private int? categoryID; /// <summary> /// 类别ID,为null时不做查询条件。 /// </summary> public int? CategoryID { get { return categoryID; } set { categoryID = value; } } private int? typeID; /// <summary> /// 类型ID,为null时不做查询条件。 /// </summary> public int? TypeID { get { return typeID; } set { typeID = value; } } private string name; /// <summary> /// 产品名称,模糊匹配。 /// </summary> public string Name { get { return name; } set { name = value; } } private string description; /// <summary> /// 描述,模糊匹配。 /// </summary> public string Description { get { return description; } set { description = value; } } private int pageSize; /// <summary> /// 页大小 /// </summary> public int PageSize { get { return pageSize; } set { pageSize = value; } } private int pageIndex; /// <summary> /// 页索引 /// </summary> public int PageIndex { get { return pageIndex; } set { pageIndex = value; } } }
/// <summary> /// 获取产品 /// </summary> /// <param name="query">查询条件</param> /// <returns></returns> public DataTable GetProduct(QueryProduct query) { ...... }
3.方法的参数越少越好,能少一个,绝不多一个。
这里没有一个参数是多余的,少任何一个参数都不能满足需求,方法的参数越少越好是毋庸置疑的,但绝不是用这种坑爹的方式减少参数。
4.方法的参数超过3个就要封装成对象。
是否要将参数封装成对象,不能只看参数的数量,还要看它的业务意义,作为数据载体的实体类,即使只有两个属性,也要用对象传递。但像这种,不需要持久化,而且每个参数都有各自的业务意义,没有特殊原因,就应该写在方法的参数列表里。
关于这个问题,小弟希望看看大家是怎么对待的,希望大家能在回复时除了表述自己的观点,同时告知在项目中会采取哪种方式。
[解决办法]