to.SysMsg.Interfaces.MsgType.Error); false;
}
}
else
{
/ / Ініціюємо додавання об'єкта в таблицю
_datacontext.GetTable (). InsertOnSubmit (obj);
}
Ініціюємо прийняття ізміненій ();
} (Exception ex)
{
_appcontext.SysMsg.ReportMsg (ex.Message, avto.SysMsg.Interfaces.MsgType.Error); false;
}
return true;
}
Також реалізовано кілька уніфікованих методів для доступу до даних використовують фільтри, наприклад метод поверне параметр клієнта з заданим назвою значенням і певного клієнта.
GetByFilter (it => it.Client_Param_name == textBox2.Text && it.Client_Param_Value == textBox3.Text && it.Client.Client_id == client. Client_id)
Цей механізм реалізований функцією побудованої навколо стандартної для linq функції Where ()
public IQueryable GetByFilter (Expression > filter) where T: class
{
{_datacontext.GetTable (). Where (filter);
} (Exception ex)
{
_appcontext.SysMsg.ReportMsg (ex.Message,
avto.SysMsg.Interfaces.MsgType.Error); } Queryable.AsQueryable (new List ());
}
.4 Структура програмного комплексу
Так як комплекс складається з декількох модулів, необхідно пояснити, як відбувається їх взаємодія. Загальна схема наведена на малюнку 3.8
Малюнок 3.8 - Структур системи програмного комплексу
В основі системи лежить база даних з нею безпосередньо взаємодіє бібліотека AVTO.DATA - бібліотека взаємодії з базою даних.
Вузловим проектом системи є бібліотека Avto.Interfeise - в якій зосереджені всі застосовувані в проекті інтерфейси. Через які і здійснюється взаємодія між модулями системи.
На малюнку 3.7 проектом AVTO позначений виконуваний модуль системи містить також і базові графічні елементи управління.
Однією з умов пред'являються до системи є можливість розширення її функціональності. Для вирішення цього завдання пропонується архітектура плагінів.
Для всіх плагінів, визначається базові інтерфейси. За цих інтерфейсів програма зможе ідентифікувати свої плагіни. Далі виділяються окремі завдання, реалізації рішень яких надалі можуть або будуть змінені або доповнені. Таким чином, виділяються типи плагінів, які система буде використовувати. Кожен тип плагіна визначається своїм інтерфейсом. Розробник, який хоче написати плагін до програми, вибирає один з цих типів плагінів, і створює клас, який успадковується від класу обраного типу плагіна.
За такою схемою додаток зможе однозначно ідентифікувати плагін. Після створення об'єкта плагіна додаток зможе працювати з ним через уніфікований інтерфейс. Але за такою схемою у плагіна немає можливості звернутися при необхідності за додатковою інформацією до батьківського додатком. Ця про...