Каковы различные методы для введения сквозных проблем?

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

ответвление необслуживания А должно быть создано только, когда существует вероятность (или уверенность) коллизий среди кода, который был бы трудным управлять любым другим путем. Если ответвление не решит логистическую проблему, оно создаст тот.

Нормальная разработка выпуска происходит в магистрали. Разработчики зарегистрировались и из магистрали для нормальной работы выпуска. Техническая разработка патчей к текущему Производственному коду должна быть в ответвлении для того выпуска и затем объединена с магистралью, как только патч передал тестирование и развертывается. Работа в ответвлениях необслуживания должна быть скоординирована в зависимости от конкретного случая.

25
задан Stacy Vicknair 10 November 2009 в 15:53
поделиться

1 ответ

Шаблон проектирования Decorator - отличная отправная точка для реализации сквозных задач.

Сначала вам нужно определить интерфейс, моделирующий рассматриваемую службу. Затем вы реализуете реальную функциональность этой службы, вообще не думая о вашей сквозной проблеме.

Затем вы можете впоследствии реализовать классы декорирования, которые охватывают другие экземпляры и реализовать желаемую сквозную проблему.

Этот подход может должны быть полностью реализованы с использованием простых старых объектов C # (POCO) и не требуют дополнительных фреймворков.

Однако, если вы устали писать все дополнительные декораторы, вы можете использовать фреймворк. У меня нет опыта работы с явными фреймворками АОП, но большинство контейнеров DI, таких как Castle Windsor , предлагают функции, подобные АОП.


Здесь ' s пример использования декораторов. Допустим, у вас есть следующий интерфейс:

public interface IMyInterface
{
    void DoStuff(string s);
}

Ваша конкретная реализация может делать что-то очень интересное, например, записывать строку в Консоль:

public class ConsoleThing : IMyInterface
{
    public void DoStuff(string s)
    {
        Console.WriteLine(s);
    }
}

Если вы хотите регистрировать операцию DoStuff, теперь вы можете реализовать декоратор регистрации:

public class LoggingThing : IMyInterface
{
    private readonly IMyInterface innerThing;

    public LoggingThing(IMyInterface innerThing)
    {
        this.innerThing = innerThing;
    }

    public void DoStuff(string s)
    {
        this.innerThing.DoStuff(s);
        Log.Write("DoStuff", s);
    }
}

Вы можете продолжать писать новые декораторы, такие как кэширующий декоратор или декоратор, который реализует безопасность и т. Д., И просто обертывать их друг вокруг друга.

Примечание: я редко рекомендую статические интерфейсы, поэтому интерфейс Log.Write не рекомендация, но просто как заполнитель. В реальной реализации я бы внедрил какой-то интерфейс ILogger в LoggingThing.

например, запись строки в консоль:

public class ConsoleThing : IMyInterface
{
    public void DoStuff(string s)
    {
        Console.WriteLine(s);
    }
}

Если вы хотите регистрировать операцию DoStuff, теперь вы можете реализовать декоратор ведения журнала:

public class LoggingThing : IMyInterface
{
    private readonly IMyInterface innerThing;

    public LoggingThing(IMyInterface innerThing)
    {
        this.innerThing = innerThing;
    }

    public void DoStuff(string s)
    {
        this.innerThing.DoStuff(s);
        Log.Write("DoStuff", s);
    }
}

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

Примечание: я редко рекомендую статические интерфейсы, поэтому интерфейс Log.Write не является рекомендацией, а просто используется в качестве заполнителя. В реальной реализации я бы внедрил какой-то интерфейс ILogger в LoggingThing.

например, запись строки в консоль:

public class ConsoleThing : IMyInterface
{
    public void DoStuff(string s)
    {
        Console.WriteLine(s);
    }
}

Если вы хотите регистрировать операцию DoStuff, теперь вы можете реализовать декоратор ведения журнала:

public class LoggingThing : IMyInterface
{
    private readonly IMyInterface innerThing;

    public LoggingThing(IMyInterface innerThing)
    {
        this.innerThing = innerThing;
    }

    public void DoStuff(string s)
    {
        this.innerThing.DoStuff(s);
        Log.Write("DoStuff", s);
    }
}

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

Примечание: я редко рекомендую статические интерфейсы, поэтому интерфейс Log.Write не является рекомендацией, а просто используется в качестве заполнителя. В реальной реализации я бы внедрил какой-то интерфейс ILogger в LoggingThing.

но просто означает в качестве заполнителя. В реальной реализации я бы внедрил какой-то интерфейс ILogger в LoggingThing.

но просто означает в качестве заполнителя. В реальной реализации я бы внедрил какой-то интерфейс ILogger в LoggingThing.

24
ответ дан 28 November 2019 в 21:43
поделиться