Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Miminal Requirements Tool, помогите с дизайном 
:(
    Опции темы
dmitryperets
Дата 26.1.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



Добрый день,

Требуется написать утилиту для проверки минимальных системных требований для некого приложения. Есть набор требований (скорость процессора, количество памяти и т.д.), утилита просто проходит по списку и проверяет каждое требование, вынося вердикт "Pass" или "Fail". Кроме того, в случае "Fail" в отведённый listbox выводится дополнительная информация (к примеру, "You don't have enough memory to run the application" или "You don't have CD-RW device, you will not be able to burn CDs"). 

Предложенный дизайн выглядит так. Имеем иерархию классов, наследующих от базового CRequirement:

                                            CRequirement
                                             |                  |
              CThresholdRequirement      CBooleanRequirement
               |                                 |         |                              |
      CCPUReq                   CRAMReq   CCDRWReq            CMouseScrollReq

Список не полный.

CThresholdRequirement, CBooleanRequirement и т.п. отличаются способом, по которому определяется вердикт. Допустим, для CThresholdRequirement все значения числовые, и он выдаёт "Pass" если реальное значение больше либо равно требуемому. А для CBooleanRequirement все значения "Есть" или "Нет", и он выдаёт "Pass" если реальное значение равно требуемому. Соответственно, последний уровень иерархии содержит уже конкретные классы, каждый из которых умеет вычислить реальное значение (допустим, вызвать GetSystemInfo() или пойти в реестр) требуемого параметра. 

Далее, вся эта иерархия складывается в умный CListCtrl2, который наследует от обычного CListCtrl. Умный список понимает, что хранит объекты CRequirement и может запускать тесты и записывать результат в нужную колонку.

Всё это работает довольно красиво, но остаётся одна проблема: как быть с сообщениями (теми, что должны выводиться в отведённый listbox). Дело в том, что сообщения не являются привязанными к конкретному требованию. Они могут быть привязаны к группе требований. Например, есть четыре отдельных требования: CCDROMReq, CDVDROMReq, CCDRWReq, CDVDRWReq. Они проверяют соответственно наличие "читалки" дисков, "читалки" DVD, "писалки" дисков и "писалки" DVD. Клиент требует, чтобы это были именно четыре отдельные строчки, по каждой из которых был бы вердикт "Есть" или "Нет". Проблема в том, что сообщение в listbox'я зависит от результата всех этих четырёх тестов. Если нет ни читалки, ни писалки DVD, то будет сообщение "You won't be able to read or burn DVD". Если есть есть читалка, но нет писалки, то будет написано "You won't be able to burn DVD". И т.п. Таким образом, я не могу привязать сообщение к конкретным классам моей иерархии. Должен быть ещё какой-то механизм корреляции тестов, что ли... При этом хочется, чтобы код был как можно более generic, то есть чтобы вся специфическая информация хранилась где-то в одном месте, а не по всему коду.

Подскажите какую-нибудь красивую идею на этот счёт. Заранее благодарен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0338 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.