WCF
4.0 Multi-Tier services development with LINQ-to-Entities is about
about using LINQ with Entity Framework to create a data layer in a WCF
web service. The book approaches the content from the point of view of a
junior developer–one that is not necessarily familiar with Visual
Studio. The book generally approaches the topic from a useful
lowest-level to highest-level evolution–starting with how to create a
WCF service from scratch and working up to creating a WCF service with
the built-in Visual Studio templates. The book follows the important
contract-first design model for web services.
I like the book’s
approach to layering, it’s a refreshing change to see purposeful
decoupling of layers and not something that simply pushes entity classes
from the data layer all the way to the interface layer–each layer has
it’s own concept of the domain entity in use. This is very important
with web services because what can be implemented in a web service is a
subset of what can be implemented in .NET; and to a certain extent, what
can be modeled in the database and the data access layer is also a
subset of what can be implemented in .NET. So, it’s important that the
business logic layer be free to implement the domain entities how it
needs to without being limited to what cannot be implemented in a web
service message or in what cannot be implemented in a particular
database. That is, in the examples, the entities created by the Entity Framework are
restricted to the Data Access Layer and they are not used in the web
service’s requests and responses.
The book generally shows a
consistent example that evolves from single layer to multi-layer,
starting with the service layer. This form of description is useful for
people who are not familiar with layering. This also has a similar
flow to Test-Driven Design (TDD).
This book covers, in detail,
use of much of the new C# 4 syntax, including LINQ (really LINQ syntax,
plus anything that LINQ depends on in the new C# syntax; which is most
of it). Two chapters are devoted to this new C# syntax. This book also
covers in detail how to create WCF services with and without the
built-in Visual Studio templates. For advanced developers, much of this
book might be a bit beneath them–if you’re already familiar with
Visual Studio, layering, C# 4, and debugging in Visual Studio, you may
find half the book details information you already know. If you are
already familiar with WCF and Entity Framework, you probably won’t get
much out of this book–as expected.
There are a few points that I find are
slightly off in terms of correctness; but none that apply to LINQ to
Entities or WCF. Unfortunately, “multi-tier” really isn’t detailed.
The examples are strictly multi-layer, not multi-tier (assuming the
client to the web service must always be considered its own tier–i.e. I
infer more than two tiers from “multi-tier services”). The
implementation of the web service (the interface layer, the business
logic layer, and the data access layer) is a single tier in every
example. The concepts of the book could easily be expanded to the
business logic layer and the data access layer to wrap them in a WCF web
service to truly implement a multi-tier service. There are several
examples of performing automated tests (coded tests) within the book. I
was a little disappointed that these weren’t approached as unit tests
and either implemented with Visual Studio testing framework or another
common unit testing framework like NUnit.
The book uses a few
well-known patterns in its implementations; but, doesn’t go into too
much detail other than their implementation. For example, it uses the
Data Access Object (DAO) pattern but doesn’t use the term “Data Access
Object”. This isn’t unexpected, since the book isn’t about patterns. If you’re the target audience of this book, I would suggest
following up with some reading on patterns. The book generally
implements the patterns it uses correctly, but I find the choice of some
of the patterns to be somewhat academic. For example, the author
chooses the typical Microsoft 3-layer architecture: interface layer
(service layer), business logic layer, and data access layer. The
typical problems of mixing business logic within the business logic
entities and outside these entities occurs. I’ll leave it as an
exercise for the reader to research how to approach this problem.
(hint, check out my blog archive and keep reading my blog).
The book also doesn’t really go into much detail about WCF configuration even with
regard to web services. There’s no detail of switching bindings like
from HTTP to HTTPS, to TCP, etc. And there’s no mention of
SvcConfigEditor–an essential tool in the arsenal of every WCF
developer.
If it wasn’t obvious, I’d recommend this book to junior developers who
need to get up to speed and be productive in WCF and Entity Framework in a short amount of time.
A sample chapter can be found at https://www.packtpub.com/sites/default/files/sample_chapters/wcf-multi-tier-services-development-with-linq-sample-chapter-5-implementing-a-wcf-service-in-the-real-world.pdf and the publisher’s landing page for the book can be found here: https://www.packtpub.com/wcf-multi-tier-services-development-with-linq/book