Класс Filter
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace laba4
{
public class Filter
{
private ILogExp expression;
private string field_name;
private string filter_value;
public Filter(ILogExp new_expression, string new_field_name, string new_filter_value)
{
expression = new_expression;
field_name = new_field_name;
filter_value = new_filter_value;
}
public bool check(Firm firm)
{
List<Field> firm_fields = firm.Get_fields_list();
for (int i = 0; i < firm_fields.Count; ++i)
{
if (firm_fields[i].get_name() == field_name)
return expression.check(filter_value, firm_fields[i].get_value());
}
return false;
}
}
}
Рис.4-6 Работа приложения
Вывод
Были изучены базовые принципы проектирования объектно-ориентированных программ,UML-диаграмм последовательности и деятельности, а также принципы тестирования пользовательского интерфейса.
Была разработана программная реализация представления фирмы на основной форме в системе взаимоотношений с клиентами с обеспечением возможностей: выбора состава полей для отображения; выполнения фильтрации фирм по содержимому нескольких полей и контактов; добавления новых фирм и редактирования полей существующих фирм и их контактов для основного подразделения.
Также разработаны автономные тесты, обеспечивающие проверку правильности добавления новой фирмы и фильтрацию фирм по значениям полей «Город» и «Дата начала контактов» с использованием графического интерфейса.
Для выполнения системных операций, которые инициируются с помощью меню основной формы необходимо наличие специального контроллера. Таким контроллером является основной контроллер приложения MainContr, обеспечивающий управление всеми системными операциями с возможным привлечением дополнительных контроллеров.
Основной контроллер содержит менеджер фирм, который определяет текущее представление фирмы (состав полей) FirmVw и текущий набор фирм, которые отображаются с помощью элемента ListView, расположенного на основной форме frmMain.
Каждый тип логического выражения StrFieldExpr, DateFieldExpr, IntFieldExp, необходимый на данный момент в системе, имеет ссылку на строго типизированный интерфейс логического выражения. В качестве реализации данного интерфейса выступают обобщенные классы логических выражений для операций равно (EQ), не равно (NoEQ), больше (GT), меньше (LT), больше или равно (GE), меньше или равно (LE), содержит (Contains) и не содержит (NoContains).
Системное событие о необходимости выполнения фильтрации фирм передается в основной контроллер MainContr, который создает частный контроллер фильтрации FilterContr и указывает ему ссылку на текущий менеджер фирм. Далее создается форма для выбора условий фильтрации по каждому полю frmFilter, с которой связывается ассоциацией частный контроллер FilterContr.
Форма frmFilter содержит два компонента для отображения двух видов полей (данных и строк), которые отображают разный состав возможных логических условий.
Чтобы создать такие компоненты, в визуальном редакторе была скомпонованаодна из панелей, скопирован код в отдельный класс и модернизирован этот класс наличием в именах элементов индекса соответствующей панели, тем самым обеспечивая уникальность имен элементов. А также класс компонент получает текущую высоту свойства Location панели для перемещения панели по высоте исходной формы.
При нажатии на кнопку «Применить» все включенные правила фильтрации помещаются в контроллер фильтрации и форма закрывается. При этом основной контроллер MainContr получает от частного контроллера фильтрации FilterContr новый экземпляр класса FirmMngr, содержащий отфильтрованный список фирм и замещает на него первоначальную ссылку менеджера фирм.