Sentrus Command update II
Following on from the first update a couple of weeks ago, I wanted to share some more details about the decisions we made regarding the architecture of the Sentrus Command application and what’s been happening so far.
As I mentioned before, we decided to build Sentrus Command using ASP.NET MVC as the development platform to enable us to rapidly develop an extensible, flexible, easily-testable application. The key points of the layered architecture we’ve implemented are as follows:
- Presentation Layer: ASP.NET Models, (Razor) Views and Controllers
- Application Layer: Service interfaces and implementations
- Domain Layer: Model classes and repository interfaces
- Infrastructure Layer: Repository implementations, data access (Entity Framework), email processing, etc
Then orthogonal to the layers mentioned above, is the Globalization kernel which ensures we will be able to provide full localization support for international clients. We decided to use the i18n framework by Daniel Crenna which implements the GNU gettext() standard popular amongst the open-source movement, as opposed to the standard ASP.NET MVC localization features, on account of the broader range of editing tools and easier management of localization files.
We initially started development of the Sentrus Command infrastructure using LINQ to SQL as the underlying ORM framework, but we later made the switch to EF. While initially, it seemed quite straightforward to work with, there are some subtle idiosyncrasies that proved to be quite time-consuming to identify. One of the most frustrating was when trying to retrieve a collection of child objects along with the parent, where all our code appeared to be correct, but we just couldn’t get the child collection populated. Eventually, it proved to be the lack of a “virtual” modifier on the child property that prevented EF from creating the necessary dynamic sub-class it requires. Just one of many lessons learnt along the way.
All the same, progress is being made; this is a short list of the functionality that is completed or under development:
- New theme, in progress. The designers have been working away on a fresh new look for the application that’s coming along very nicely. I won’t share any full grabs just yet as there’s still a lot of changes being made, but this is a sneak peek at the direction the styling is going in.
- Log publishing (from Sentrus plugin), done. This is handled by a REST-ful API implemented through an ASP.NET MVC controller class. Telligent Evolution event logs and exception logs are both being imported correctly. The API checks for the latest event or exception received previously and then publishes any newer entries to the API endpoint.
- Filter architecture, done. Sentrus Command filters are extensible objects that can contain collections of conditions and actions. As incoming events are received, the conditions of each defined filter for that subscription are applied and if successful, all linked actions will be executed. This forms the basis of an extremely powerful analysis engine that can be easily extended by creating new condition and/or action classes.
- Filter pipeline, in progress. The key mechanism to apply filters to incoming events is being implemented as an AppFabric service which allows the filter execution to be moved out of the web worker process.
- Subscription management, in progress.
Much of the groundwork has now been completed, laying the path for the initial features we have planned, but there’s still a lot to do. Stay tuned for the next update.