Sample Application • Multi Layered Architecture (n- tier): – Graphical User Interface (GUI): • Forms, components, controls • The Visual Designer in Visual Studio – Application: • Model • Controllers – Database FEN 2012 1 UCN Technology: Computer Science
27
Embed
Sample Application Multi Layered Architecture (n-tier): –Graphical User Interface (GUI): Forms, components, controls The Visual Designer in Visual Studio.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Sample Application
• Multi Layered Architecture (n-tier):– Graphical User Interface (GUI):
• Forms, components, controls• The Visual Designer in Visual Studio
– Application:• Model• Controllers
– Database
FEN 2012 1UCN Technology: Computer Science
Architecture
• So far we have had our “user interface” in the Main method
• This won’t do with reel users!• Normally one will use what is known
as a layered (or n tier) architecture, for instance:– UI– Controller– Model– Database
//---private void CreateTestData(){ Customer c = new Customer(1, "Peter Thomsen"); myBank.AddCustomer(c); myBank.AddCustomer(new Customer(2, "Ib Helmer")); BankAccount acc1 = new BankAccount(1, 8, 100); BankAccount acc2 = new BankAccount(2, 0.25, 0); BankAccount acc3 = new BankAccount(3, 5, 1000); c = myBank.GetCustomer(1); c.AddAccount(acc1); c.AddAccount(acc2); c.AddAccount(acc3); c = myBank.GetCustomer(2); c.AddAccount(acc2);}
Getting some Action
• Double click on the Find Customer Button and you get an empty event handler method for the button. This method is executed when the button is clicked.
• That is done by enclosing the code in a try-block.
• After that we have a catch-block where we handle the exception.
FEN 2012 UCN Technology: Computer Science 18
private void button1_Click(object sender, EventArgs e){ string inString = textBox1.Text; try { int custNo = Convert.ToInt32(inString); c = bankCtr.GetCustomer(custNo); textBox2.Text = c.Name; } catch (Exception excep) { MessageBox.Show("Customer number must be an integer"); }}
Adding a Database
• So far we have create some test data and kept them in memory.
• This won’t do for real application!• Normally one will use what is known
as a layered (or n tier) architecture, for instance:– UI– Controller– Model– Database
• And the databasewill be some kind of SQLserver.
FEN 2012 UCN Technology: Computer Science 19
Application
Now we focus on adding a database
A Side: Creating the Database
• First we define our database tables (this is done using SQL Server Management Studio, but can also be done from Visual Studio (not Express):– One table per domain object:– Customer– (Bank)Account
– View the database in SQL Server Management Studio
– SQL scripts for creating the database and inserting test data can be found here.
FEN 2012 UCN Technology: Computer Science 20
The 1- n association from Customer toBankAccount is implemented in the database by including custNo as a foreign key in Account
Adding a Database - Architecture
• We will add a database to the Banking Project.
• Architecture:– The Controller is responsible for
communication with the database connection classes (DBLayer).
– The DBLayer encapsulates the code for accessing the database and stores and builds objects.
– The DBLayer takes the role of containers.
View Code
FEN 2012 UCN Technology: Computer Science 21
SQL Server
Architecture – in Visual Studio
• One Solution – 5 projects, each project having its own namespace.
• Architecture:– Model: (old Banking4). The
controller is put in its own project: Controller.
– Banking5 is the old GUI.– The DBLayer has classes for
accessing the database and storing and building objects.
– BankingWithFullMonty is the main project with the new start-up form
FEN 2012 UCN Technology: Computer Science 22
DBLayer
• We use a SQL Server Database.
• The Class AccessDbSQLClient is responsible for opening and closing the connection and for creating a Command object that can be passed to the SQL Server.
• The class CustomerDBSQLClient is responsible for retrieving and storing Customer objects in the database.
public void AddCustomer(Customer c){ CustomerDBSQLClient.CreateCustomer(c.CustNo, c.Name);}
//public List<Customer> Customers//{// get { return customers; }//}
public List<Customer> Customers{ get { return CustomerDBSQLClient.GetCustomers(); }}
The Controller
• Complex search loops are replaced by calls to the database.
FEN 2012 UCN Technology: Computer Science 25
//public Customer GetCustomer(int no)//{// //if customer not found, null is returned// Customer c = null;// int i = 0;// bool found = false;// while (!found && i < customers.Count)// {// c = customers[i];// if (c.CustNo == no)// found = true;// else// i++;// }// return c;//}
public Customer GetCustomer(int no){ return CustomerDBSQLClient.FindCustomerByNo(no);}
class CustomerDBSQLClient
FEN 2012 UCN Technology: Computer Science 26
public static Customer FindCustomerByNo(int custNo) { string sql = @"select * from Customer where custNo = " +custNo;
if (dbReader.Read()) c = new Customer(Convert.ToInt32(dbReader["custNo"].ToString()), dbReader["name"].ToString()); else c = null; dbReader.Close(); AccessDbSQLClient.Close(); return c; }
The SQL Statement is build
Command object with this SQL statement is build
The command is sent to the SQL Server and executed
The result is returned in a reader object – The Customer object is build from the reader
DB Connection is closed
Eventually the Customer object is returned.
Exercises
• Make the “Show total bal” button work (some refactoring may be necessary).
• Add some more interesting functionality to the application (you may use some of the methods in the controller).
• Refactor the application, so that the different layers (tiers) become components (.dll).