우리는 현재 정말로 마감 기한을 지키고 있으며,이 문제는 결코 목적이 아닙니다. 그래서 나는 다음과 같이 가난한 사람의 정적 인 인터페이스/가난한 사람의 DI로 시작하는 것을 생각하고 있습니다. 그래서 전체 솔루션을 수정할 필요가 없습니다.
// Poor-man's static interface (DI).
public static class OriginalBuiltInStaticClass {
private static IMyNewClass _myNewClass;
public static void Inject(IMyNewClass myNewClass) {
_myNewClass = myNewClass;
A = _myNewClass.A;
B = _myNewClass.B;
C = _myNewClass.C;
}
public static Action A = CopySimpleRenameBuiltInStaticClass.A;
public static Func<int, string> B = CopySimpleRenameBuiltInStaticClass.B;
public static Action C = CopySimpleRenameBuiltInStaticClass.C;
}
// Original vendor class which was copied and renamed.
public static class CopySimpleRenameBuiltInStaticClass {
public static void A() {
Console.WriteLine("OriginalBuiltInStaticClass.A()");
}
public static string B(int id) {
Console.WriteLine("OriginalBuiltInStaticClass.B()");
return id.ToString();
}
public static void C() {
Console.WriteLine("OriginalBuiltInStaticClass.C()");
}
}
// Creating an interface to merge into trunk of NopCommerce (convert static repositories)
public interface IMyNewClass {
void A();
string B(int id);
void C();
}
// Implementation of interface.
public class MyNewClass : IMyNewClass {
public void A() {
Console.WriteLine("MyNewClass.A()");
}
public string B(int id) {
Console.WriteLine("MyNewClass.B()");
return id.ToString();
}
public void C() {
CopySimpleRenameBuiltInStaticClass.C();
}
}
어떤 생각을 : 그럼 나중에, 우리는 시간이 그리 누를 때, 인터페이스 및 의존성 주입을 사용하고 NopCommerce에 패치 제출을 통해 변경?
래퍼 클래스를 사용하여 캡슐화 하시겠습니까? – Tahbaza
그런 다음 래퍼 클래스를 대신 사용하도록 NopCommerce 코드를 수정해야합니까? –
@ jbarker7 : 아니요, 그렇지 않습니다. Anna Lear와 Goblin (다른 용어 사용)은 변경할 수없는 통계를 중심으로 자신 만의 래퍼 클래스 라이브러리를 만들 것을 제안합니다. 두 가지 대답 중 하나를 올바르게 선택해야합니다. – Tahbaza