View
214
Download
0
Tags:
Embed Size (px)
Citation preview
Outline
Enterprise Application Architecture Layering Structure Domain Logic
C# Attribute
Aspect Oriented Programming (AOP)
Enterprise Application Architecture
Complex systems always break down into layers e.g. Networking – OSI 7 layers Model Pros
Working on a single layer without knowing much about other layers
Minimizing dependencies between layers Con
Transforming from layers harming performance
Enterprise Application Architecture
Enterprise Application Architecture – 3-layer Presentation Layer
Display of information e.g. GUI windows, webpage Handling user commands
Domain Logic Layer Business logic (Core)
Data Source Layer Communication with database, messaging systems
Enterprise Application Architecture
Domain Logic Patterns Domain Model
An object model of the domain that incorporates both behavior and data Solving the problem in object-oriented way
Pro – Handling complex logic in a well-organized way Con – “Impedance mismatch” between OO model and
relational database
Enterprise Application Architecture
O/R Mapping Problems – Identity Problem OO – Different objects referenced by different
pointers Database – Different rows identified by primary
key Solutions
Identity Field
Team ID Team Name
public class Team { int TeamID; string TeamName;}
Key
Identity Field
Enterprise Application Architecture
O/R Mapping Problems – Identity Problem Solutions (Cont’d)
Foreign Key Mapping
Team
Team ID
Team Name
Player
Player ID
Player Name
Player ID Team ID Player Name
Team ID Team Name
*
1
Foreign Key Mapping
Enterprise Application Architecture
O/R Mapping Problems – Inheritance
Student
Name
School
University Student
Department
Secondary Student
Class
CUHK Student
College
How to do mapping?
Enterprise Application Architecture
O/R Mapping Problems – Inheritance Single Table Inheritance
Wasting space – many null columns Concrete Table Inheritance
Changing the superclass altering all the subclasses’ tables
Name School Class Department College
Name School Class
Name School Department
Name School Department College
Enterprise Application Architecture
O/R Mapping Problems – Inheritance Class Table Inheritance
Requiring multiple joins to rebuild an object
Name School
Class
Department
College
Enterprise Application Architecture
Solutions OO databases
Not common (relational databases are widely adopted)
Tight coupling with the domain model Automated O/R mapping tools
Not prefect (may solve 80% of the problems) Expensive
Enterprise Application Architecture
Other Domain Logic Patterns Transaction Scripts
Organizes business logic by procedures where each procedure handles a single request from the presentation Server page (php, jsp), CGI scripts
Table Module A single instance that handles the business logic for al
l rows in a database table or view Commonly use in .NET development platform
C# Attribute
C# Attribute Embedding information in C# code Placed in square brackets [ ], above an Attribute
Target (e.g. class, field or method)
Reflection Querying information at run-time Dynamically invoking methods
[serializable]public class Test { … }
C# Attribute
Intrinsic Attribute Built-in attributes in .NET Common Library Runtim
e (CLR) Examples
In your assignment 1 [assembly: AssemblyVersion(“1.0.0.0”)]
[serializable] [STAThread]
C# Attribute
Custom Attribute
Create your custom attribute
// Set what kinds of elements can use this custom attribute[AttributeUsage(AttributeTargets.All)]public class MyAttribute : Attribute { // Define your own attribute string myName;
public MyAttribute(string name) { myName = name; } public string Name { get { return myName; } }}
Use your custom attribute
[MyAttribute("MyClass")]public class Test { [MyAttribute("MyMethod")] public void Print { Console.WriteLine("Test Program"); }}
C# Attribute
Reflection – Querying informationpublic class MyProgram { public static void Main() { Type type = Type.GetType("Test");
foreach (Attribute attr in type.GetCustomAttributes(false)) { // Retrieve attributes for the class MyAttribute myattr = attr as MyAttribute; if (myattr != null) Console.WriteLine(attr.Name); }
foreach(MethodInfo method in type.GetMethods()) { foreach (Attribute attr in method.GetCustomAttributes(false)) { // Retrieve attributes for the method MyAttribute myattr = attr as MyAttribute; if (myattr != null) Console.WriteLine(“Method: {0} with Attribute: {1}”, method, attr.Name); } } }} Output
MyClassMethod: Void Print() with Attribute: MyMethod
C# Attribute
Reflection – Invoking methodspublic class MyProgram2 { public static void Main() { Type type = Type.GetType("Test"); Object o = Activator.CreateInstance(type); // Create a “type” object MethodInfo mi = type.GetMethod("Print"); mi.Invoke(o, null); // Invoke method - “mi” }}
Output
Test Program
Aspect Oriented Programming
OOP Breaking down a complex system into modules Encapsulating responsibilities into different object
s Problems
Some tasks cut across multiple modules (crosscutting concern) Logging Authentication
Solution: Aspect Oriented Programming (AOP)
Aspect Oriented Programming
AOP in C#
Non-AOP Implementation
public class Test { public void TestMethod() { Log log = new Log(); log.Print("Enter"); // Log when entering this method Console.WriteLine("Test Method"); log.Print("Leave"); // Log with leaving this method }}
AOP Implementation [AttributeUsage(AttributeTargets.Class)]public class LogAttribute : ContextAttribute { // Code Here}
public class LogProperty : IContextProperty, IContributeObjectSink { // Code Here}
public class LogAspect : IMessageSink { // Code Here}
[Log]public class Test : ContextBoundObject { public void TestMethod() { Console.WriteLine("Test Method"); }}
Aspect Oriented Programming
How does it work in C# “ContextAttribute” and “ContextBoundObject” Intercepting the calls(Interception)
Client YourObject
Client YourObjectTransparent
ProxyMessage
Sink
Without Interception
With Interception
Intercepted by .NET
References
Enterprise Application Architecture M. Fowler, “Patterns of Enterprise Application
Architecture”, Addison Wesley C# Attribute
http://www.oreilly.com/catalog/progcsharp/chapter/ch18.html
Aspect Oriented Programming (AOP) http://www.codeproject.com/gen/design/aop.asp http://msdn.microsoft.com/msdnmag/issues/02/03
/AOP/