P
P
Pavel Kaptur2016-07-26 18:10:28
C++ / C#
Pavel Kaptur, 2016-07-26 18:10:28

How to design a program correctly?

Hello everyone, I have a question. It was necessary to write a program that removes traces of flash drives from a computer with windows 7/8/10. I wrote the program, but I don’t like how it turned out at all and I want to listen to the opinion of those who have more experience in this. The essence of the program, deleting certain files, clearing logs, and a complex enumeration of keys in the registry. First, the number of ControlSets is determined in the registry and devices and keys are searched from there, by keywords, or based on previously received data. There are also many predefined paths. I had to write a lot of small functions, and a lot of variables where I have to store ControlSets / Users and found keys, values, VID_&PID_ and a lot of things. I wrote all this in the form of one class in which at the end there were many variables and functions, Yes, it has become very difficult. And I feel that it all turned out very ugly. Here's how to do it beautifully and well architecturally?

Answer the question

In order to leave comments, you need to log in

3 answer(s)
S
sitev_ru, 2016-07-26
@sitev_ru

I wrote all this in the form of one class in which at the end there were many variables and functions, and everything became very complicated.

As I understand it, everything is ready and working. You can go one of the ways:
Path 1st. Break your large class into several logically complete parts and arrange them in the form of classes.
Way 2nd. Select one logically complete part and arrange it in a class until it becomes beautiful ...)
Should help

A
abcd0x00, 2016-07-27
@abcd0x00

The essence of the program, deleting certain files, clearing logs, and a complex enumeration of keys in the registry.

You need to build a hierarchy of performers. And for this you need to know what a performer is.
Допустим, тебе надо удалять файлы - значит, тебе нужен исполнитель "удаляльщик файлов". Там у него несколько действий есть типа "проверить файл", "удалить файл". То есть удалением файлов занимается только он. Бывает, что при удалении файла, нужно его имя как-то составить, проверить, можно ли его удалять. Вот этим всем занимается этот "удаляльщик".
Допустим, тебе надо очистить журнал - значит, тебе нужен исполнитель "обработчик журнала". Там у него несколько действий есть типа "найти запись", "добавить запись", "удалить запись". То есть операциями с журналом занимается только он.
Допустим, тебе надо перебирать ключи в реестре - значит, тебе нужен исполнитель "обработчик реестра". Там у него несколько действий есть типа "найти ключ", "добавить ключ", "удалить ключ", "изменить ключ". То есть операциями с реестром занимается только он.
И вот этим всем у тебя управляет исполнитель "дирижёр". Там у него несколько действий есть типа "поработать с файлами", "поработать с журналом", "поработать с реестром так", "поработать с реестром сяк". То есть он управляет этими другими исполнителями, каждый из которых умеет делать что-то своё.
Дальше ты пишешь функцию, которая управляет этим "дирижёром".
А вообще всё делается наоборот: сначала пишешь функцию управления "дирижёром", потом реализуешь этого "дирижёра" и в его методах реализуешь управление нужными исполнителями, а потом уже реализуешь сами исполнители. Это называется "метод разработки сверху вниз".

K
kozura, 2016-07-27
@kozura

In order for the program to be properly designed, you need to design it correctly :)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question