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
}
}
}
我的问题是
如何重构“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;
}
}
对我来说,我不会再重构那个方法,因为它很短。在这里(在当前状态下)重构不会产生更具可读性的代码。
如果方法会增长,这可能会改变。
在我的 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
}
}
}
我的问题是
如何重构“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;
}
}
对我来说,我不会再重构那个方法,因为它很短。在这里(在当前状态下)重构不会产生更具可读性的代码。
如果方法会增长,这可能会改变。