Обязанности класса

Я хочу создать приложение, которое ведет список объектов Computer, проверяет их наличие (используя Ping) и, если они доступны, использует PSExec для добавления или удаления пользователей в / из списка администраторов.

В настоящее время я не могу понять, как создавать свои классы - какой класс должен за что отвечать (я хочу использовать общие шаблоны, такие как SRP, настолько хорошо, насколько это возможно, без "переборов").

Если посмотреть на проверку доступности, должен ли быть "дополнительный" класс, выполняющий запрос ping, или это должен делать сам объект (экземпляр) компьютера? Если необходимо использовать дополнительный класс, как компьютер (и другие) объекты должны быть уведомлены об изменении доступности? С собственностью?

Мысли о таких вещах сводят меня с ума и мешают мне продолжать... Я знаю, что нет правильного ответа, поскольку это, очевидно, вопрос о дизайне и мнении, но я был бы признателен, если бы мог получить мнение экспертов здесь - надеюсь, это вернет меня в нужное русло.

1 ответ

Привет, я придумал следующее в соответствии с описанием. Класс Computer придерживается SRP, поскольку он касается только объектов Computer. Все операции делегированы специализированным классам. В настоящее время я добавил только класс для проверки доступности. Мы также можем добавить специализированный класс для добавления удаления пользователей.

Открыта для обсуждения и уточнения.

public class Computer
{
    // properties of the computer class
    public IList<User> Users;

    // IAvailabiity checker
    private readonly IAvailabilityChecker _checker;

    // constructor
    public Computer(IAvailabilityChecker checker)
    {
        this._checker = checker;
    }

    // operations
    public void AddUser()
    {
        if (this._checker.IsAvailable())
        {
            // add user
        }
    }

    public void RemoveUser()
    {
    }
}

public class User
{
}

public interface IAvailabilityChecker
{
    bool IsAvailable();
}

public class AvailabilityChecker
{
    public bool IsAvailable()
    {
        // availability checker logic
        return true;
    }
}
Другие вопросы по тегам