To powinno być proste, ale nie mogę tam niczego znaleźć.Automatyczne generowanie klasy Wrapper w języku C# przy użyciu kompozycji
Mam klasy w jednym zespole (wspólna biblioteka - to zestaw klas proxy dla usługi sieci Web) Mam klasy w innym montażowej (projekt WWW)
Istnieje klasa o nazwie " Profil ", który znajduje się w zespole proxy. Istnieje zestaw klas, które "używają" profilu w projekcie WWW. Gdy użytkownik nie jest zalogowany, używany jest GenericProfile.
Zgodnie z zasadą "rozdzielania obaw" ... Zespół proxy jest używany w innych projektach i dotyczy wyłącznie usług sieci Web. Projekt internetowy ma tylko elementy sieciowe.
Jednak istnieje już zapotrzebowanie na "Ogólny profil" - należy go traktować jako "Użytkownik-gość".
Logiczną rzeczą do zrobienia jest zbudowanie interfejsu o nazwie IProfile i spowodowanie wyprowadzenia z niego obu klas. Ale to spowodowałoby całkowitą zależność między tymi dwoma zespołami.
Następnym najlepszym pomysłem jest stworzenie trzeciego zespołu o nazwie MyInterfaces i umieszczenie w nim IProfile - ale moim zdaniem to narusza zasadę Separacji Zanieczyszczeń. Przynajmniej jedno wystąpienie tego problemu wydaje się zbyt małym powodem, dla którego warto stworzyć dodatkowy moduł w moim rozwiązaniu.
Wprowadź klasy otoki - lub Composite klasy otoki (cokolwiek chcesz to nazwać)
szukam czegoś, co kończy się generując coś takiego poniżej. Czy istnieje narzędzie lub rozszerzenie Visual Studio, które to zrobi? Może plik .tt?
namespace WebProject
{
public interface IProfile
{...}
class MyWrapperClass : IProfile
{
Proxy.Profile _profile;
public MyWrapperClass(Proxy.Profile proxy)
{
_profile = proxy;
}
public string IProfile.Property1{ get { return _profile.Property1; } set { _profile.Property1 = value; } }
public string IProfile.Property2{ get { return _profile.Property2; } set { _profile.Property2 = value; } }
public string IProfile.Property3{ get { return _profile.Property3; } set { _profile.Property3 = value; } }
}
}
Wygląda na to, że ktoś zapytał o coś podobnego ... http://stackoverflow.com/ques/2150416/generator-pass-through-code-when-preferring-composition-over-dziedziczenie – 010110110101
Nie mam ReSharpera chociaż ... – 010110110101
Używałbym do tego T4 (dokładnie tak jak myślałeś), ale ja nie wiem, czy istnieje już pełny szablon do tego. Ale myślę, że taki szablon można by napisać całkiem łatwo za pomocą refleksji. –