Всем привет, у меня возник такой вопрос. Понадобилось написать программу, которая удаляет следы флешек с компьютера с windows 7/8/10. Я программу написал, но мне совершенно не нравится, какая она получилась и хочется послушать мнение тех, у кого больше опыта в этом. Суть программы, удаление определенных файлов, очистка журналов, и сложный перебор ключей в реестре. Сначала в реестре определяется количество ControlSet и от туда ищутся устройства и ключи, ко ключевым словам, или исходя из ранее полученных данных. Так же имеется много заранее предопределенных путей. Мне пришлось написать много маленьких функций, и множество переменных где приходится хранить ControlSets/Users и найденные ключи, значения, VID_&PID_ и много всякого. Написал я все это в виде одного класса в котором в конце оказалось много переменных и функций, да и очень все стало сложным. И я чувствую, что все это очень по уродски получилось. Вот как архитектурно это сделать красиво и хорошо?
Павел Каптур: в любом случае, при отсутствии дублирования код разносится по разным классам и все. Я любитель fluent кода, если это имеет смысл. Если программа открытая, выкладывайте на гит, народ сам подтянется, подскажет.
Суть программы, удаление определенных файлов, очистка журналов, и сложный перебор ключей в реестре.
Нужно построить иерархию исполнителей. А для этого нужно знать, что такое исполнитель.
Как разложить
Допустим, тебе надо удалять файлы - значит, тебе нужен исполнитель "удаляльщик файлов". Там у него несколько действий есть типа "проверить файл", "удалить файл". То есть удалением файлов занимается только он. Бывает, что при удалении файла, нужно его имя как-то составить, проверить, можно ли его удалять. Вот этим всем занимается этот "удаляльщик".
Допустим, тебе надо очистить журнал - значит, тебе нужен исполнитель "обработчик журнала". Там у него несколько действий есть типа "найти запись", "добавить запись", "удалить запись". То есть операциями с журналом занимается только он.
Допустим, тебе надо перебирать ключи в реестре - значит, тебе нужен исполнитель "обработчик реестра". Там у него несколько действий есть типа "найти ключ", "добавить ключ", "удалить ключ", "изменить ключ". То есть операциями с реестром занимается только он.
И вот этим всем у тебя управляет исполнитель "дирижёр". Там у него несколько действий есть типа "поработать с файлами", "поработать с журналом", "поработать с реестром так", "поработать с реестром сяк". То есть он управляет этими другими исполнителями, каждый из которых умеет делать что-то своё.
Дальше ты пишешь функцию, которая управляет этим "дирижёром".
А вообще всё делается наоборот: сначала пишешь функцию управления "дирижёром", потом реализуешь этого "дирижёра" и в его методах реализуешь управление нужными исполнителями, а потом уже реализуешь сами исполнители. Это называется "метод разработки сверху вниз".