【问题标题】:The simplification of the classes are similar类的简化是相似的
【发布时间】:2019-11-23 07:42:27
【问题描述】:

我有类MainModel 和内部类MainModelBaseContractModelWorkerModel。最后两个基本相同。它们的区别在于两种方法的执行方式和一些方法的返回值。

DeleteContract()DeleteWorker() 是不同的代码(LoadPage() 也是)。但是ReloadPage()FirstPage() 等等 - 是一样的。返回值的差异。

我可以将此移植代码简化为MainModelBase 吗?有意义吗?

整个代码超过 300 行。所以这里的结构。完整代码here

public class ContractModel : MainModelBase
{
    public ContractModel()


    internal bool DeleteContract(int id)

    internal List<ContractTableRow> ReloadPage()
    internal List<ContractTableRow> FirstPage()
    internal List<ContractTableRow> LastPage()
    internal List<ContractTableRow> NextPage()
    internal List<ContractTableRow> PreviousPage()
    internal List<ContractTableRow> CustomPage(int customPage)

    private List<ContractTableRow> LoadPage()
}

public class WorkerModel : MainModelBase
{
    public WorkerModel()

    internal bool DeleteWorker(int id)

    internal List<WorkerTableRow> ReloadPage()
    internal List<WorkerTableRow> FirstPage()
    internal List<WorkerTableRow> LastPage()
    internal List<WorkerTableRow> NextPage()
    internal List<WorkerTableRow> PreviousPage()
    internal List<WorkerTableRow> CustomPage(int customPage)

    private List<WorkerTableRow> LoadPage()
}

public class MainModelBase
{
    private int count;

    internal int MaxPage 
    internal int MinPage 
    internal int Count 
    internal int Size 
    internal int Page 
    internal string NumPageText 


    internal void Added()

    private int GetMaxPage()
}

更新

方法CustomPage() 调用LoadPage(),但它对每个类都不同(Delete() 也是)。

这样做对吗?

public class ContractModel : PagedModelBase<ContractTableRow>
{
    public ContractModel()

    internal override bool Delete(int id)
    internal override List<ContractTableRow> LoadPage()
}

public class WorkerModel : PagedModelBase<WorkerTableRow>
{
    public WorkerModel()

    internal override bool Delete(int id)
    internal override List<WorkerTableRow> LoadPage()

}

public abstract class PagedModelBase<T>
{
    internal void Added()
    internal abstract bool Delete(int id);

    internal List<T> ReloadPage()
    internal List<T> FirstPage()
    internal List<T> LastPage()
    internal List<T> NextPage()
    internal List<T> PreviousPage()
    internal List<T> CustomPage(int customPage)

    internal abstract List<T> LoadPage();

    private int GetMaxPage()
}

【问题讨论】:

    标签: c# class inheritance return


    【解决方案1】:

    似乎是使用泛型的好选择:

    public class PagedModelBase<T> : MainModelBase
    {
        internal bool Delete(int id)
    
        internal List<T> ReloadPage()
        internal List<T> FirstPage()
        internal List<T> LastPage()
        internal List<T> NextPage()
        internal List<T> PreviousPage()
        internal List<T> CustomPage(int customPage)
    
        private List<T> LoadPage()
    }
    
    public class ContractModel : PagedModelBase<ContractTableRow> 
    {
        // contract specific implementation here
    }
    
    public class WorkerModel : PagedModelBase<WorkerTableRow>
    {
        // worker specific implementation here
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多