Открытые проекты

RAD Framework

В целях повышения эффективности работы компании мы попытались обобщить опыт работы над различными проектами и выделить переиспользуемые базовые классы в общую библиотеку для всех последующих DotNet разработок. Данная библиотека приобрела название проекта FulcrumWeb Framework. Основной целью нашего Framework-а является устранение рутиного труда программистов, связанного с созданием и поддержкой сложного пользовательского интерфейса путем внедрения идеи декларативного программирования основанного на мета-данных. Вместо скучного кодирования поисковых форм, списков и взаимодействия с БД наш Framework дает возможность программистам сфокусироваться на более интересных задачах, связанных со сложной бизнес-логикой приложения. Ниже приведено краткое описание функциональности Framework-а и варианты его использования (на английском языке).

Overview

In most cases the user interface of any business application consists of two types of views: list view and detail view.

- The list view usually displays a listing of some business entity (e.g. customers, orders, contracts, invoices) and allows standard operations, such as creation of a new entity, editing an existing entity, deleting an entity, printing entity details, etc. Generally, a grid component is used for list views.

- The detail view shows detail information of a selected entity and allows the same standard operations as the list view. Mostly, a dialog window is used for detail view.

In spite of an apparent simplicity of development of user interface for a custom application, this process is known as quite a tedious task, and takes a considerable amount of time and resources.

Applications often look inconsistent and buggy (and behave in this fashion!). A same (from user’s point of view) bug may exist (and therefore should be fixed separately) in dozens of places.

Any developer is being confronted with these issues every day.

To address this generic problem, we have developed a special Framework – the set of core application classes – which reduce amount of time and resources spent on custom development, and improve the quality of the end-product.

 

Fulcrum’s RAD Framework

The framework classes are responsible for

  • displaying list and detail views,
  • error-handling,
  • logging, and
  • reading and writing data from and to database

Special “auto edit form” automatically creates and lays out controls for editing of the entity attributes.

Developer can easily override default layout or even mix “auto layout” areas with custom created ones.

To provide a list and detail view for a business entity, a developer may either use framework’s base class (which is quite adequate for fast prototyping or even as a final solution for simple entities) – or – use them as a base class to inherit from, and build a custom one.

In this latter case the developer is freed from the tedious routinely task of transferring data between entity and form, validating data, control placing, etc.

The Framework is based on XML metadata that describe business entities and their attributes, look and behavior of the list and detail views.

The metadata include description of:

  • Main application menu
  • Business entities
  • Entity attributes
  • Application reports
  • User-friendly error messages

Metadata are easily extensible and allow “assembling” application from parts by adding new business entities and describing or refining their behavior.

The Framework has special data-access classes that wrap all database calls and allow working not only with MS SQL Server but with any relational database (Oracle, DB2, Access, etc.)

The Framework has described classes to work with MS SQL Server Reporting services and may be easily extended to work with any other reporting tool.

The Framework has implemented a built-in security mechanism that allows for both vertical (which user may see and edit what entities) and horizontal (what set of rows is available to the user) security.

In conclusion, use of the Framework gives the development the following advantages:

  • It keeps all business entity and attributes’ properties (which are frequently subject to change) in one place. This place may be located on the server even for Windows-based applications.
  • It has all transaction and locking-related code in one place to avoid multiple implementations of the same logic.
  • It allows building applications on database objects rather than direct tables, and supporting “logical” relations and constraints rather than exclusively physical ones (those defined in the database).
  • It helps to avoid tedious and seemingly endless work of setting properties of grids and many other interface objects.
  • It drastically simplifies localization of the UI.
  • It provides the standardized way of all SQL processing. This allows easy replacement of all direct SQL calls with the Web Services invocations and adapting application to other DBMS systems. Additionally, it greatly simplifies error logging and handling.
  • From GUI standpoint, it gives a flexibility of showing business data by using standard ready-to-use components, or easily extending all of them in one shot in case there is a need of some specific functionality.
  • Since a huge chunk of functionality is ready “out of the box”, it allows for lightning-fast prototyping of changes required by user and even new applications.
  • It is reusable in other Windows and even Web-based applications.

With Fulcrum’s RAD Framework the time we spend on development of a uniform in looks and feels business application is much smaller compared to other software shops without any loss in quality of the end-product!

Windows OS based applications

The Fulcrum RAD Framework was used in development of our own product – CRM system for finance and legal industries.

Just imagine – on the screenshot below entire User Interface implementation contains no C# code and completely generated based on XML MetaData definitions.

On the screenshot you can see the main application menu tree (in the upper left angle) that lists menu items available to the current user. In the right left angle there is special pane with a list of most frequently used (hot) items and currently open items (detail forms are non-modal and therefore several forms may be opened simultaneously).

Main part of the screen (in the background) is used for listing of clients (list view). The edit form (in the foreground) is derived from the auto-layout form, and contains no custom code. Grids for phones, faxes, addresses, etc. are child entities for the client entity, and retrieval/storing/editing of these data is automatic, based on metadata information. List view may contain one or more detail tabs to show children-entities. Additionally, it may contain custom filters that allow quick restricting of data selection solely to records required at the moment (in addition to the every grid built-in filters).

Intranet/Internet Business Solutions

The Fulcrum RAD Framework described above was also used in development of ERP system for MESH Computers plc. It proved itself as a good architecture for building very complex enterprise level high performance applications.

 

Metadata driven Data Access and Web UI

The key idea of the FrameWork is to eliminate routine time-consuming C# coding by providing developer with Metadata driven application engine. Instead of writing DataAccess classes and ASCX controls developer defines Entities, Attributes, Relations, Commands, Web Parts, Pages, Navigation and Portals in XML Metadata. This approach significantly increases development speed and saves costs at Support stage. Consider an example – you have some “Customer” table in the DB and would like to implement Customer Search/Vew/Edit/New forms. All you need to do for this is define the MetaData listed below:

           

  

After we add this metadata to our Application this will create the following UI automatically (without a single line of C# /HTML code):

Portal Menu:
 
Search Form:

Search Results:
 
Edit/View forms:
 
The above web forms are completely created at runtime by our framework engine. If, for example, you will add new attribute to Customer metadata – it will automatically appear on all Search/List/View and Edit forms related to customer. This example demonstrates the very basic framework features. The way we designed framework allows building very complex Web UI with complex dependencies based on MetaData descriptions saving a lot of development time and costs.

Framework Security Settings

Unlike DNN and other content management systems – our framework security model is based on entities rather then on WebParts. This is the right approach since many different modules can work with the same entity and Module level security does not suit to enterprise level systems. Framework supports both - horizontal and vertical security
There are different levels of security settings.

  • Portal level
  • Entity level
  • Entity Command level
  • Entity Attributes (view/edit) level

Attribute Level Permissions:

 

Performance

Our framework build with Performance in mind. To improve site performance we use Entity cache and site mirroring. Framework can automatically cache files stored in DB on the file system, and Entities in Memory.

Custom Code

There are no restrictions for developer to implement completely custom entities and web parts on C#. Framework has good library of utility classes. Developer can use inheritance to change the way framework manages Data Access and UI, or alternatively create completely custom code for specific tasks.

Далее в разделе "У нас интересно"