Click here to Skip to main content
Click here to Skip to main content

Tagged as

A Tool to create N-Layer Architecture Classes

, 18 Jul 2011 CPOL
Rate this:
Please Sign up or sign in to vote.
This tool is used to create N-Layer Architecture classes.

Introduction

This is my ninth article in C#. This time, I have tried a new concept about N-Layer Architecture in C#.

What is N-Layer Architecture?

This is a very important topic to consider when developing an application. Many elements need to be considered when deciding on the architecture of the application, such as performance, scalability and future development issues. When you are deciding on which architecture to use, first decide on which of the three aforementioned elements you think is most valuable -- as some choices you make will impact on others. For example, some choices that boost performance will impact the scalability or future development of your design, etc.

Here we will talk generally about what n-Tier architecture is, and then we will have a look at different n-Tier architectures you can use to develop ASP.NET applications and issues that arise relating to performance, scalability and future development issues for each one.

Firstly, what is n-Tier architecture? N-Tier architecture refers to the architecture of an application that has at least 3 "logical" layers -- or parts -- that are separate. Each layer interacts with only the layer directly below, and has a specific function that it is responsible for.

Why use n-Tier architecture? Because each layer can be located on physically different servers with only minor code changes, hence they scale out and handle more server load. Also, what each layer does internally is completely hidden to other layers and this makes it possible to change or update one layer without recompiling or modifying other layers.

This is a very powerful feature of n-Tier architecture, as additional features or change to a layer can be done without redeploying the whole application. For example, by separating data access code from the business logic code, when the database servers change you only need to change the data access code. Because business logic code stays the same, the business logic code does not need to be modified or recompiled.

An n-Tier application usually has three tiers, and they are called the presentation tier, the business tier and the data tier. Let's have a look at what each tier is responsible for.

Presentation Layer

Presentation Layer is the layer responsible for displaying user interface and "driving" that interface using business tier classes and objects. In ASP.NET, it includes ASPX pages, user controls, server controls and sometimes security related classes and objects.

Business Tier

Business Tier is the layer responsible for accessing the data tier to retrieve, modify and delete data to and from the data tier and send the results to the presentation tier. This layer is also responsible for processing the data retrieved and sent to the presentation layer.

In ASP.NET, it includes using SqlClient or OleDb objects to retrieve, update and delete data from SQL Server or Access databases, and also passing the data retrieved to the presentation layer in a DataReader or DataSet object, or a custom collection object. It might also include the sending of just an integer, but the integer would have been calculated using the data in the data tier such as the number of records a table has.

BLL and DAL

Often this layer is divided into two sub layers: the Business Logic Layer (BLL), and the Data Access Layers (DAL). Business Logic Layers are above Data Access Layers, meaning BLL uses DAL classes and objects. DAL is responsible for accessing data and forwarding it to BLL.

In ASP.NET, it might be using SqlClient or OleDb to retrieve the data and sending it to BLL in the form of a DataSet or DataReader. BLL is responsible for preparing or processing the data retrieved and sends it to the presentation layer. In ASP.NET, it might be using the DataSet and DataReader objects to fill up a custom collection or process it to come up with a value, and then sending it to Presentation Layer. BLL sometimes works as just a transparent layer. For example, if you want to pass a DataSet or DataReader object directly to the presentation layer.

Data Tier

Data tier is the database or the source of the data itself. Often in .NET, it's an SQL Server or Access database, however it's not limited to just those. It could also be Oracle, mySQL or even XML. In this article, we will focus on SQL Server, as it has been proven to be the fastest database within a .NET Application.

app_arch.gif

Definition from Wikipedia!

Three-tier[3] is a client–server architecture in which the user interface, functional process logic ("business rules"), computer data storage and data access are developed and maintained as independent modules, most often on separate platforms.

The three-tier model is a software architecture and a software design pattern.

Apart from the usual advantages of modular software with well-defined interfaces, the three-tier architecture is intended to allow any of the three tiers to be upgraded or replaced independently as requirements or technology change. For example, a change of operating system in the presentation tier would only affect the user interface code.

Typically, the user interface runs on a desktop PC or workstation and uses a standard graphical user interface, functional process logic may consist of one or more separate modules running on a workstation or application server, and an RDBMS on a database server or mainframe contains the computer data storage logic. The middle tier may be multi-tiered itself (in which case the overall architecture is called an "n-tier architecture").

Three-tier architecture has the following three tiers:

Presentation tier: This is the topmost level of the application. The presentation tier displays information related to such services as browsing merchandise, purchasing, and shopping cart contents. It communicates with other tiers by outputting results to the browser/client tier and all other tiers in the network.

Application tier (business logic, logic tier, data access tier, or middle tier): The logic tier is pulled out from the presentation tier and, as its own layer, it controls an application’s functionality by performing detailed processing.

Data tier: This tier consists of database servers. Here information is stored and retrieved. This tier keeps data neutral and independent from application servers or business logic. Giving data its own tier also improves scalability and performance.

Basic Requirements

  • .NET Framework 3.5 and above
  • SQL Server 2000 and above

Description about the Tool

Basically to create classes for the n-layer architecture, we need write code considering the table structure and write codes for business logic and data access layers separately. Also if the database has some more number of tables, we need to spend more time in creating the classes for each and every table.

So to simplify this, I developed this tool. The tool creates the Data Object class (I named it as “Value Object”), business logic layer class, Data access layer class. The tool creates with basic functionalities. If we want to add any extra functionalities, we can edit it separately by opening it in any IDE (of course Visual Studio).

Ingredients of the Tool

  1. Class Generator Controls: This is a separate windows class library which contains all the components required to connect to the server, list of databases in the server, list of tables in the selected database. The location where the classes are to be created, the names of the namespace and the classes. 
  2. Class Generator Events: This is also a separate class library which handles all the events of the controls of the Class Generator Controls.

The classes are created in such a way that it can be used with Linq.

scr1.jpg

I have created all the required class libraries separately and then integrated them in the Class Generator Windows Application. You can get a clear picture about the controls, events by downloading the solutions.

Class Generator Controls

scr2.jpg

Class Generator Events

scr3.jpg

Workflow of the Tool

First, we need to provide the login credentials of the database including server name or IP, username and password and click connect button. If the connection is successful, it popups out a message out that the connection is successful. After the connection is established, the list of databases in the server is binding in the database combo box. The list of tables is binding in the tables list combo box for the selected database. Along with that the namespace name, class name is displayed in the respective textboxes. 

The name of the database is treated as the namespace name and the name of the layer (BLL, DAL, VO) is concated along with that. The name of the table is the name of the class. If we want to edit it, we can do it. Then the location where the files to be created is selected. Then the language of the class files, whether C# or VB.NET is selected. Then at last the "Generate Classes" button is clicked. Once clicked, the classes are created and the full path where the classes are created are displayed in the "Class File Path" Box.

Small Piece of Code

public string CreateClassFiles()
{
	System.Text.StringBuilder resultBuilder = new System.Text.StringBuilder();
	resultBuilder.AppendLine(fileCreator.CreateVOClass());
	resultBuilder.AppendLine(fileCreator.CreateBLLClass());
	resultBuilder.AppendLine(fileCreator.CreateDALClass());
	resultBuilder.AppendLine("Files are created successfully.!");
	return resultBuilder.ToString();
}//Class Generate Button Click Event
private void btnClassGenerator_Click(object sender, EventArgs e)
{
	try
	{
		if (serverBox.IsValuesEmpty || locationBox.IsValuesEmpty 
				|| bllBox.IsValuesEmpty || dalBox.IsValuesEmpty 
				|| voBox.IsValuesEmpty)
			CommonFunctions.ShowMessageBox
				("Please enter all the required fields! ", 
				MessageBoxButtons.OK, MessageBoxIcon.Error);
		else
		{
			UIEntryStore uiEntryStore = new UIEntryStore();
			uiEntryStore.ServerInstance = serverBox.ServerInstance;
			uiEntryStore.ServerUsername = serverBox.ServerUsername;
			uiEntryStore.ServerPassword = serverBox.ServerPassword;
			uiEntryStore.DatabaseName = databaseBox.SelectedDatabase;
			uiEntryStore.TableName = databaseBox.SelectedTable;
			uiEntryStore.PrimaryKey = databaseBox.PrimaryKey;
			uiEntryStore.ColumnsInformation = 
				CommonFunctions.SqlServerEventHandler.
				GetTableColumns(databaseBox.SelectedDatabase, 
				databaseBox.SelectedTable);
			uiEntryStore.FileLocation = locationBox.FileLocation;
			uiEntryStore.VOClassName = voBox.ClassName;
			uiEntryStore.VONamespace = voBox.Namespace;
			uiEntryStore.VOParentDirectories = voBox.ParentDirectories;
			uiEntryStore.BLLClassName = bllBox.ClassName;
			uiEntryStore.BLLNamespace = bllBox.Namespace;
			uiEntryStore.BLLParentDirectories = 
						bllBox.ParentDirectories;
			uiEntryStore.DALClassName = dalBox.ClassName;
			uiEntryStore.DALNamespace = dalBox.Namespace;
			uiEntryStore.DALParentDirectories = 
						dalBox.ParentDirectories;
			uiEntryStore.ClassFileLanguage = 
				languageBox.IsCSSelected ? ClassLanguages.CSharp : 
				ClassLanguages.VisualBasic;
			ClassGeneratorButtonEvents buttonEvent = 
				new ClassGeneratorButtonEvents(this, uiEntryStore);
			this.classFilesInfoBox.DisplayText = 
				buttonEvent.CreateClassFiles();
		}
	}
	catch (Exception ex)
	{
		CommonFunctions.ShowMessageBox
			("Error occured while creating class files." + 
			Environment.NewLine + "Please debug the error: " + 
			ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
	}
}

Please view the complete code in the downloads.

Using of the Created Classes. Sample code

//Selecting all the records.
ProductsBLL productsBLL = new ProductsBLL();
var products = productsBLL.SelectAll().OrderBy
		(p => p.ProductName);// Selecting a single record.
private Products GetProduct(int id)
{
     Products product = productsBLL.SelectAll().Find(p => p.ProductID == id);
     return product;
}

Conclusion

Thanks for reading this article. I expect feedback from you. You expect more from me.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

No Biography provided

Comments and Discussions

 
QuestionNice work Prakash Pinmemberv.naveen28-Feb-14 0:16 
SuggestionGreate work PinmemberAJMAL SHAHZAD8-Jul-13 22:11 
QuestionClassGenerator: VONamesapce PinmemberDini Miller4-Jul-13 6:34 
QuestionCircular dependency Pinmemberdash5556-Nov-12 7:10 
AnswerRe: Circular dependency PinmemberSaleth Prakash7-Nov-12 0:56 
GeneralRe: Circular dependency Pinmemberdash5557-Nov-12 6:06 
GeneralRe: Circular dependency Pinmembercvalero20-Aug-13 8:58 
GeneralA very good article PinmemberRahul Rajat Singh13-Aug-12 19:46 
QuestionSQL Server 2008 r2 not supporting Pinmemberluckystarcse25-Apr-12 21:31 
AnswerRe: SQL Server 2008 r2 not supporting PinmemberSaleth Prakash25-Apr-12 22:45 
QuestionRe: SQL Server 2008 r2 not supporting Pinmemberdash5556-Nov-12 7:25 
GeneralMy vote of 5 PinmemberProEnggSoft27-Feb-12 0:31 
QuestionErorr Pinmemberhlinhbkhn1-Feb-12 22:16 
AnswerRe: Erorr PinmemberSaleth Prakash1-Feb-12 22:30 
Hi,
 
Open WPI (Windows Platform Installer), in products tab, you can see "Microsoft sql server 2008 management objects", select it and install it in your PC. After installing restart your PC and then try it. It will working fine now. In fact i also faced these sort of bugs, but i was able to overcome as i mentioned.
K.S. Prakash

Bugsame problem Pinmemberlmik98982-Jun-12 20:53 
QuestionExcelent job!! PinmemberFranCastillo8-Nov-11 8:08 
Questionmy vote 5 PinmemberYahya Mohammed Ammouri24-Sep-11 11:09 
QuestionNice job Pinmemberipadilla18-Jul-11 21:46 
GeneralMy vote of 5 PingroupBrijesh Kr18-Jul-11 18:50 
BugError Pinmemberpapas_boy218-Jul-11 16:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.141220.1 | Last Updated 19 Jul 2011
Article Copyright 2011 by Saleth Prakash
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid