Minimal Requirements Tool

Тема в разделе "MS Visual C++", создана пользователем Dmitry Perets, 26 янв 2008.

Статус темы:
Закрыта.
  1. Dmitry Perets

    Dmitry Perets Гость

    Добрый день,

    Требуется написать утилиту для проверки минимальных системных требований для некого приложения. Есть набор требований (скорость процессора, количество памяти и т.д.), утилита просто проходит по списку и проверяет каждое требование, вынося вердикт "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 (abstract)
    -----> CThresholdRequirement (abstract) : public CRequirement
    ---------------> CCPURequirement : public CThresholdRequirement
    ---------------> CRAMRequirement : public CThresholdRequirement
    -----> CBooleanRequirement (abstract) : public CRequirement
    ---------------> CCDRWRequirement : public CBooleanRequirement
    ---------------> CMouseScrollRequirement : public CBooleanRequirement

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

    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, то есть чтобы вся специфическая информация хранилась где-то в одном месте, а не по всему коду.

    Подскажите какую-нибудь красивую идею на этот счёт. Заранее благодарен.
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Много букв :) Давай более сузим постановку задачи.
    Т.е. у тебя есть класс CCDRWRequirement, который должен делать 4 вида тестов, которые ты указал. Причем в дереве должен быть только класс CCDRWRequirement, но в связанном поле должно быть 4 вида тестов?
     
  3. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Я бы ввел дополнительный базовый CCompoundRequirement: тест, результат которого зависит от нескольких других. Список тогда может уметь сгруппировать результаты базовых тестов, и как summary: вывести итоговый результат составного теста.

    CD read: pass
    CD write: pass
    DVD read: pass
    DVD write: fail
    Disk operations summary: You won't be able to burn DVD

    UPD: собственно, я бы не стал в общий список добавлять базовые. В список добавить только составной, и разрешить тесту выдавать больше одной строчки результата. Тогда тест сможет оформить вывод по своему вкусу. Впрочем, это уже по задаче надо смотреть.

    UPD2: а объединяя сюда коммент European, можно не создавать нового типа тестов, а просто разрешить тесту кроме основного результата давать дополнительные. Тогда будет один CCDRWRequirement, который отдаст детали и конечный результат
     
Загрузка...
Похожие Темы - Minimal Requirements Tool
  1. puks
    Ответов:
    0
    Просмотров:
    2.414
  2. puks
    Ответов:
    4
    Просмотров:
    6.520
Статус темы:
Закрыта.

Поделиться этой страницей