The dnp.Framework is designed to provide features not found in the core .NET framework. While there are elements that are of a general nature, much of the framework is centred more around an application framework and the tools need to build one rather than a set of disparate features. The frameworks core areas include:

Database Explorer API: This API is used to help build code generated frameworks or models. It can also be a very useful API for anything that requires knowledge of a databases schema. Features include support for schemas, tables, views, indexes, constraints, relationships (1:1, 1:M, M:M, M:1, recursive). Full support for stored procedures, functions and views (basic view support is there) is not complete, but will be added in a future release.

Domain Model API: This API is primarily focused on providing an abstract view of a database schema in a more entity (Domain Model) based way. This API leverages the Database Explorer API for database schema information, but presents it in a more object oriented way. From this API it is possible to build complex code generated models and frameworks.

Models API: This API is designed to extend the Domain Model API and provide a custom model view of the domain. An example code smith script built on the model will be shipped which provides support for auto-generation of stored procedures, data access and services (wcf). Area's of difference will be full support for inheritance, Many-to-Many, Many-to-One (substitution of ID's for values ie StatusID becomes StatusName) relationships. All of which will be customisable either within the context of the supplied model or your extension of it.

Business: This area of the framework is design to deal with the issues around business entities and provide a solution to many of the issues faced in developing applications using custom entities. Area's of support will include, centralized business rules and an entity base class to handle state and validation management (even going across the wire).

Scripting: This comes in two flavours, the first being general purpose utility classes to make writing code generation scripts easier. The other, is vendor specific utility classes to make using their tool easier. For the later they are provided in a separate dll to avoid issues if you don't use that vendors product.

Development: Provides a utility classes to help with development tasks. Currently they centre around unit testing or scenario testing of code that interacts with databases. This has been released as a separate project on CodePlex.

General: In order to support many of the primary functions of the framework, more generalized classes have been built which you can also make use of as well. They include a generic custom configuration handler, generic serializer/de-serializer and a new collection class that handles composite keys such as being used in the database API a examples.

Futures: The area's described so far are in varying states of completeness and will be released as they become more stable. Other area's that are planned include UI controls that understand business entities and therefore know how to bind, validate, modify and persist (no not all in one control) them reducing the amount of UI code required.

As elements of the framework are released, they will be linked to from this page and hopefully provide a reasonable amount of documentation to make the code useful. At present the code will be released as assemblies, but there are plans to release the full source code once the code has been fully tested and there is enough interest (takes time - so if you want it you'll have to ask for it! :) ).

If you are interested in keeping up to date with the frameworks development, then I'd recommend you register with the RSS feed at the top of this page. I'll be making blog entries each time a new release it made available.


Download: Now on CodePlex, UnitTestEx Project

Code Smith Samples Installation Tutorial

Issue tracking - Find a problem with this release, let us know!

I appreciate any feed back you have on the framework and any bugs you might find. You can contact me here, or at the CodePlex project.