class 库中的 C# 重构

C# refactoring in class library

在我的 class 库中有一个 class 方法“Add”

 Class A{
        //method A
        bool Add (string Username, string ItemDescription, int Quantity){
              CheckStock checkStock = new CheckStock();
             if (!checkStock.isAvailble) return false;
             RePositoryA rePositoryA= new RePositoryA();
             if (rePositoryA.GetUserID<=0) return false;
             RePositoryB rePositoryB= new RePositoryB();
             if (!rePositoryA.AddInvoice) return false;
             return ture;
        }
    
}
   class RePositoryA {
         
    //get userID based on username 
          int GetUserID (username){
       //connect to database and get id
   }
    
   class RePositoryB {
         
    //add invoice 
          bool AddInvoice(Invoice myInvoice){
       //connect to database and add invoice to dabase
   }
  

     class CheckStock {
             bool isAvailble(string ItemDescription){
             //connect to webAPi and return if its in stock
         }
      }

 }    

我的问题是

  1. 如何重构“Add”方法,使我们不直接实例化新的 RePositoryA 、 RePositoryB 和 CheckStock ? 2.I 知道一种方法做三件事违反了“只做一件事政策”,所以上面的代码可能需要分解成三种方法? 喜欢

       bool Add(){
              CheckStock();
              GetUserID();
              AddInvoice();
    

    }

感谢帮助!!!

你应该使用依赖注入

class A
{
    public A(CheckStock checkStock, RePositoryA repositoryA, RePositoryB repositoryB)
    {
        _checkStock = checkStock;
        _repositoryA = repositoryA;
        _repositoryB = repositoryB;
    }

    public bool Add(string Username, string ItemDescription, int Quantity)
    {
        if (!_checkStock.isAvailble) return false;
        if (rePositoryA.GetUserID <= 0 ) return false;
        if (!rePositoryA.AddInvoice) return false;
        return true;     
    }
}

对我来说,我不会再重构那个方法,因为它很短。在这里(在当前状态下)重构不会产生更具可读性的代码。

如果方法会增长,这可能会改变。