Архитектура корпоративных систем
Upcoming SlideShare
Loading in...5
×
 

Архитектура корпоративных систем

on

  • 2,850 views

Лекция Михаила Гуренкова по архитектуре корпоративных систем в рамках курса по ООП. Каф. Вычислительная ...

Лекция Михаила Гуренкова по архитектуре корпоративных систем в рамках курса по ООП. Каф. Вычислительная математика и программирование, МАИ.

Statistics

Views

Total Views
2,850
Views on SlideShare
1,964
Embed Views
886

Actions

Likes
0
Downloads
10
Comments
0

4 Embeds 886

http://oop.mainfo.ru 877
http://www.oop.mainfo.ru 7
http://www.slideshare.net 1
http://translate.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Архитектура корпоративных систем Архитектура корпоративных систем Presentation Transcript

  • Архитектура корпоративных систем
  • Планы на ближайшее время
    • 30 марта — лабораторная работа №2
    • 3 апреля — модульное тестирование
    • 10 апреля — рефакторинг
    • 17 апреля — разработка пользовательских интерфейсов
    • 24 апреля — дизайн пользовательских интерфейсов (!!!)
  • Виды корпоративных приложений
  • Архитектура?
  • Архитектура
    • — представление системы программного обеспечения, процесс, а также и дисциплина, посвященные эффективной разработке проекта данной системы.
  • Модель OSI
  • Историческая справка
  • Историческая справка
    • — Все вместе
  • Историческая справка
    • — Клиентское приложение
    • — Сервер баз данных
  • Историческая справка
    • — Представление (presentation)
    • — Домен (предметная область)
    • — Источник данных
  • Задача
  •  
  • Организация логики предметной области
  • Сценарии транзакции
    • class Cart
    • {
    • public DataTable GetItems();
    • public decimal GetTotalPrice();
    • public void AddItemToCart(int a_ItemId);
    • public void RemoveItemFromCart(int a_ItemId);
    • public void Offer(int a_UserId);
    • public DataRow GetCurrentUser();
    • ...
    • }
  • Сценарии транзакции
    • class Cart
    • {
    • public DataTable GetItems()
    • {
    • XCommand command = Registry.DataBase.CreateCommand("select * from CartItems join Items on Items.id = CartItems.id_Item where id_Session = @session");
    • command["session"].Value = GetSessionId();
    • return command.ExecuteDataTable();
    • }
    • public decimal GetTotalPrice()
    • {
    • XCommand command = Registry.DataBase.CreateCommand("select sum(Price * Amount) from CartItems join Items on Items.id = CartItems.id_Item where id_Session = @session");
    • command["session"].Value = GetSessionId();
    • return (decimal)command.ExecuteScalar();
    • }
    • public void AddItemToCart(int a_ItemId)
    • {
    • XCommand command = Registry.DataBase.CreateCommand("insert into CartItems (id_Session, id_Item) values (@session, @item)");
    • command["session"].Value = GetSessionId();
    • command["item"].Value = a_ItemId;
    • command.ExecuteNonQuery();
    • }
  • Модуль таблицы
    • — DataSet
    • — DataTable
    • — DataRow
  • Модуль таблицы
    • public void AddItemToCart(DataRow a_Item)
    • {
    • DataTable cartItems = new DataTable("CartItems");
    • DataRow newCartItem = items.NewRow();
    • newCartItem["id_Item"] = a_Item["id"];
    • newCartItem["id_Session"] = Registry.GetSessionId();
    • Registry.DataBase.Update(cartItems);
    • }
  • Модуль таблицы
    • public void AddItemToCart(DB.ItemsRow a_Item)
    • {
    • DB.CartItems cartItems = new DB.CartItems();
    • DB.CartItemsRow newCartItem = items.NewRow();
    • newCartItem.id_Item = a_Item.id;
    • newCartItem.id_Session = Registry.GetSessionId();
    • Registry.DataBase.Update(cartItems);
    • }
  • Модель предметной области
    • class Cart
    • {
    • public List<Item> Items;
    • public decimal Get TotalPrice () ;
    • public void Save();
    • ...
    • }
    • class Item
    • {
    • public string Description;
    • public decimal Price;
    • }
  • Модель предметной области
    • Cart cart = Cart.GetCurrent();
    • Item item = new Item(234);
    • cart.Items.Add(item);
    • cart.Save();
  • Модель предметной области
    • public decimal GetTotalPrice()
    • {
    • decimal result = 0;
    • foreach(Item item in Items)
    • {
    • result += item.Price;
    • }
    • return result;
    • }
  • Модель предметной области VS сценарий транзакции
    • public decimal GetTotalPrice()
    • {
    • XCommand command = Registry.DataBase.CreateCommand(&quot;select sum(Price * Amount) from CartItems join Items on Items.id = CartItems.id_Item where id_Session = @session&quot;);
    • command[&quot;session&quot;].Value = GetSessionId();
    • return (decimal)command.ExecuteScalar();
    • }
    • public decimal GetTotalPrice()
    • {
    • decimal result = 0;
    • foreach(Item item in Items)
    • {
    • result += item.Price;
    • }
    • return result;
    • }
  • Сравнение
  • :-)
  • Организация логики работы с базой данных
  • ActiveRow (активная запись)
    • class Company
    • {
    • DB.CompaniesRow m_Row;
    • public Company(DB.CompaniesRow a_Row)
    • {
    • m_Row = a_Row;
    • }
    • public int Id
    • {
    • get { return m_Row.id; }
    • }
    • public string Alias
    • {
    • get { return m_Row.Alias; }
    • set { m_Row.Alias = value; }
    • }
    • public string FullName
    • {
    • get { return m_Row.FullName; }
    • set { m_Row.FullName = value; }
    • }
    • public void Save()
    • {
    • XRegistry.DataBase.Update(m_Row);
    • }
    • }
  • ActiveRow
    • public static Company Find(int a_Id)
    • {
    • XCommand command = Registry.DataBase.CreateCommand(&quot;select * from Companies where id = @id&quot;);
    • command[&quot;id&quot;].Value = a_Id;
    • DB.CompaniesRow row = command.ExecuteDataTable<DB.Companies>()[0];
    • return new Company(row);
    • }
    • public static Company CreateNew()
    • {
    • DB.Companies table = new DB.Companies();
    • return new Company((DB.CompaniesRow)table.NewRow());
    • }
  • Data Mapper
    • class Company
    • {
    • public Company(int a_Id, string a_Alias, string a_FullName)
    • {
    • m_Id = a_Id;
    • m_Alias = a_Alias;
    • m_FullName = a_FullName;
    • }
    • int m_Id;
    • public int Id
    • {
    • get { return m_Id; }
    • }
    • string m_Alias;
    • public string Alias
    • {
    • get { return m_Alias; }
    • set { m_Alias = value; }
    • }
    • string m_FullName;
    • public string FullName
    • {
    • get { return m_FullName; }
    • set { m_FullName = value; }
    • }
    • public void Save()
    • {
    • CompanyMapper.Instance.Save(m_Id, m_Alias, m_FullName);
    • }
    • }
  • Data Mapper (преобразователь данных)
    • class CompanyMapper
    • {
    • public static CompanyMapper Instance ;
    • public Company Find(int a_Id)
    • {
    • XCommand command = Registry.DataBase.CreateCommand(&quot;select * from Companies where id = @id&quot;);
    • command[&quot;id&quot;].Value = a_Id;
    • DataRow row = command.ExecuteDataRow();
    • return new Company((int)row[&quot;id&quot;], (string)row[&quot;Alias&quot;], (string)row[&quot;FullName&quot;]);
    • }
    • public void Save(int a_Id, string a_Name, string a_FullName)
    • {
    • XCommand command = Registry.DataBase.CreateCommand(&quot;update Companies set Alias = @alias, FullName = @fullname where id = @id&quot;);
    • command[&quot;id&quot;].Value = a_Id;
    • command[&quot;alias&quot;].Value = a_Name;
    • command[&quot;fullname&quot;].Value = a_FullName;
    • command.ExecuteNonQuery();
    • }
    • }
  • Объект запроса
  •  
  • Наследование с одной таблицей
  • Наследование с таблицами для каждого конкретного класса
  • Наследование с таблицами для каждого класса
  • Отображение внешних записей
  • Отображение внешних записей
    • XCompanyContacts m_Contacts = null;
    • public XCompanyContacts Contacts
    • {
    • get
    • {
    • if (m_Contacts == null)
    • {
    • m_Contacts = new XCompanyContacts(this);
    • }
    • return m_Contacts;
    • }
    • }
  • Отображение внешних записей
    • XObjectCollection<XCompany, XCompanyGroup, DB.xCompaniesToCategories> m_Groups = null;
    • public XObjectCollection<XCompany, XCompanyGroup, DB.xCompaniesToCategories> Groups
    • {
    • get
    • {
    • if (m_Groups == null)
    • {
    • m_Groups = new XObjectCollection<XCompany, XCompanyGroup, DB.xCompaniesToCategories>
    • (this, XCompanyGroupRepostitory.Instance, &quot;id_Company&quot;, &quot;id_Category&quot;);
    • }
    • return m_Groups;
    • }
    • }
  •  
  •  
  • Московский финал Imagine Cup! 28 марта, офис компании Microsoft Russia