Was das Schreiben einer Anwendung betrifft, die sowohl ASP.NET/MVC als auch WCF nutzt, ist dies nicht besonders gut. WebAPI hat sich möglicherweise verbessert, aber in einem Projekt, das WCF und MVC in derselben App verwendet, wurden letztendlich zwei verschiedene Modellsätze verwaltet, um dieselben Konzepte darzustellen - eines für den WCF-Code und eines für die MVC Code. Sie können sich alle Mapper vorstellen, die sie schreiben mussten, um die Dinge zwischen den beiden Modellen zu übersetzen - es gab viele Codezeilen, die hätten vermieden werden können / sollten.
Ein Grund dafür ist, dass WCF-Anforderungs- und -Antwortobjekte mit [DataContract] und ihre Eigenschaften mit [DataMember] kommentiert werden sollten, während MVC dies nicht erfordert. Idiomatic MVC hingegen möchte ViewModels, die andere Ziele verfolgen als WCF DataContracts. Es ist natürlich möglich, dass die Verwendung von zwei vollständigen Sätzen von Domänenobjekten mehr mit dem Conway-Gesetz zu tun hat als mit Konflikten zwischen WCF und MVC, aber es sollte darauf hingewiesen werden, dass WCF und MVC unterschiedliche Ziele und Anforderungen in Bezug auf Ausgabe und Eingabe haben.
Persönlich bin ich teilweise an der Entwicklung einer einfachen, aber leistungsstarken, serviceorientierten Back-End-API interessiert, insbesondere wenn Sie mehrere Clients benötigen. Ich denke, das Aufkommen exzellenter JavaScript-MVVM- und Micro-MVC-Frameworks macht dies zu einer natürlichen Wahl, da das Schreiben von Anwendungscode unter Verwendung von BackboneJS , KnockoutJS und anderen eine leistungsfähige Entwicklungsumgebung ermöglicht. Sie können dann das Back-End in der Micro-MVC Ihrer Wahl verwenden, um Ihre Web-App zu erstellen, oder auf einem mobilen Client, und Ihre Partner können dieselbe API auch remote verwenden.
Vorschlag
Entweder WebAPI oder Service Stack sind gute Kandidaten für die Erstellung Ihrer Back-End-API. Ich empfehle Service Stack, da ich es in den letzten Monaten verwendet habe und es als hervorragenden Ersatz für WCF empfunden habe. Momentan schreibe ich eine Tutorial-Serie über Service Stack in meinem Blog .
Die Gruppe, die den Service-Stack verwaltet, hat eine Beispielanwendung veröffentlicht, die das Framework verwendet, um einen StackOverflow-ähnlichen Klon zu entwickeln, der ein Entwicklungsmuster zeigt, das meiner Meinung nach besonders überzeugend ist. Es handelt sich um ein einfaches, modellbasiertes Service-Back-End, das Sie sich vorstellen können, wenn Sie von einer MVC-Website, einer mobilen App oder einfach von irgendetwas anderem genutzt werden. Die Designziele von ServiceStack fördern eindeutig ein Muster, das zu einer geringeren Kopplung zwischen Client und Server führen sollte. Die Idee ist, gesprächige APIs mit Aufrufen zu vermeiden, die GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
weniger Methoden bevorzugen. Sie können dasselbe im Service-Stack wie folgt implementieren:
[Route("/customers", "GET"]
[Route("/customers/search/{SearchTerm}", "GET"]
[Route("/customers/region/{Region}", "GET"]
[Route("/customers/region/{Region}/search/{SearchTerm}", "GET"]
public class Customers
{
public int? RegionId { get; set; }
public string SearchTerm { get; set; }
}
public class CustomersService : Service
{
public object Get(Customers request) {
// handle request
return new CustomersResponse();
}
}
Der Vorteil, in meinen Augen ist, dass statt sich über viele Geschäftslogik Verbreitung haben und viele verschiedene Methoden GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
, GetCustomersInRegion(int regionId)
, GetCustomersWithSearchTerm(string searchTerm)
, GetCustomers()
, es ist alles an einem Ort. Dies sollte zu besser wartbarem Code führen.
Zufälligerweise hat Stack Exchange den ursprünglichen Service Stack- Autor eingestellt . Er engagiert sich weiterhin aktiv für das Service Stack-Projekt.
Ich mag besonders Nachrichtenwarteschlangen für bestimmte Dinge - und während WCF dies zulässt, tut WebAPI dies nicht. Mit ServiceStack kann derselbe Webdienst über MQ aufgerufen werden. Weitere Informationen hierzu finden Sie beim Redis MQ-Host unter: github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis