see these Related topics:
- Multi tier basics
- A best practice for multi tier architecture
- A sample code based on best practice
- Examine utilities to speed up Multi tier programming- NLog
We are going to create a web application to show different products and add products. See the database definition:
First open visual studio then create an empty solution afterwards add these projects to the Solution:
Common Layer (A class library)
In this layer we are going to define business entities and interfaces. Also sometimes we may define enumerations since it should be understandable for all other layers. We may want log information so having a logger class here could be useful serving all layers. The best tool for logging information and bugs is NLog (I will explain how to work with NLog in future posts). We also need a serviceFacotry class to create proper object of Facade layer. If you look at the architecture (previous lesson) you will see that UIProvider layer connect to facade layer but we may need to change this facade layer to a webservice so creating object from this layer should be configurable. One way is that a service factory can be used another way is using Spring. I will talk about Spring in future posts. Please look at the sample code.
using System;
using System.Collections.Generic;
using System.Text;
using MultiTier.Common.ServiceInterface;
using MultiTier.Common.BusinessEntities;
using System.Configuration;
using System.Reflection;
using System.Web;
namespace MultiTier.Common
{
public class ServiceFactory
{
private static Assembly asm;
public static IProductService GetProductService()
{
if (asm == null)
{
//Load Assembly
string AssemblyName = ConfigurationManager.AppSettings["Assembly"];
string asmPath = HttpContext.Current.Server.MapPath("~/bin/" + AssemblyName);
asm = Assembly.LoadFile(asmPath);
if (asm == null)
throw new Exception("Assembly could not be found: " + AssemblyName);
}
string className = ConfigurationManager.AppSettings["Product"];
IProductService obj = asm.CreateInstance(className) as IProductService;
if (obj == null)
throw new Exception("class could not be created: " + className);
return obj;
}
}
}
There are different ways of implementing ServiceFactory. This implementation is the simplest way but not the efficient way. I would say using spring is the best approach. Firstly a proper assembly is loaded then a new product object is created afterwards it is casted to the IProductService interface finally object is returned as IProductService. What you need to know is that we are using Reflection to load assembly and to create productService object. The address of assembly and the class name that we need to create object is configured in configuration file (in our case this configuration is web.config in UI project)
Data Access Layer (a class library)
The main purpose of this layer is to save and retrieve data from database. So there is a class named "ProductDal" gets data from database and map the data to the business entity. And send it back to BL layer. In ProductDal some stored procedures are called and a helper class is created to add parameter for each stored procedure. (Please download the source code)
In This business layer we do not have any special business but let me give you an example if a user select bunch of products to buy then in this layer the price should be calculated. And then some code will be written here to withdraw his account.
Facade Layer (a class library)
The responsibility of this layer is that make it easier for UI to connect to this layer without understanding the complexity of backend. Let me give you an example. In this layer we may add some code to log accessing to data also we may check security etc. Please see the code.
Important: After getting the code you need to change the connection string (It depends on where you put the sample code but if you look at the sample code there is a database that is in web.config you need to specify address of this file)
9 comments:
Im glad to see you again as a teacher
Splendid, great job! Thanks for all you thought me.I owe you alot.
Thanks Prof.
Helloooooooooooo to one of the best teachers and colleagues that I ever had
I'm so happy see your web site and I can use your knowledge again.
Thanks a lot for everything
Hey Neda,
I missed you a lot.
How is it going in Canada.
I hope I can help it
Cheers
Hi Emad,
I love this lesson and will be looking at using these concepts in my next project.
Many Thanks
Jeff
Hey,
i was looking for practical examples and i luckily got your website , it helped me a lot,
thanks you so much
santosh
Is there a way to not use the ObjectDatasource control?
Dear Emad,
your description was something. you just saved my life. before reading your article on multi-tier architecture, I was so confused about this issue. Reading the article, I am able to develop my project based on this architecture.
So many thanks to the greatest mentor ever.
Thanks,
Parham
you rock.....cool man...
Post a Comment