Вместо того, чтобы иметь компоненты, ответственные за их имена, я бы создал класс NameGenerator
, которому был предоставлен корень и (необязательно) начальный номер, который предоставляет NextName
:
public class NameGenerator {
private int _next;
private readonly string _nameRoot;
public NameGenerator(string nameRoot) : this (nameRoot, 0)
{}
public Namegenerator(string nameRoot, int firstNumber)
{
_next = firstNumber;
_nameRoot = nameRoot;
}
public string NextName()
{
return String.Format("{0}_{1}", _nameRoot,_next++);
}
}
Ваш Generator
класс должен теперь иметь набор этих объектов (до вас, нужно ли инициализировать их с нетерпением или лениво), а ваш класс Component
должен иметь конструктор, принимающий имена, которые выкидывает NameGenerator
.
public class Component_A{
public string name {get;private set;}
public Component_A(string name){
this.name = name;
}
}
чисто функциональный конфликт - это конфликт, в котором 2 конфликтующих изменения не затрагивают одни и те же файлы:
Каждое отдельное изменение может пройти проверки, но при объединении в одну ветвь код не будет работать, так как добавленный вызов в S4 не будет соответствовать обновленному прототипу из S1 .
В этом случае оба слияния выполняются с ускоренной перемоткой вперед, и git не может обнаружить конфликт - не будет фактических слияний файлов при трехстороннем слиянии, поскольку наборы изменений не затрагивают одни и те же файлы. Таким образом, конфликт также не будет обнаружен инструментами на основе git, анализирующими слияние, например, gerrit.
Только проверки, выполненные инструментом CI / CD, могут обнаружить такой чисто функциональный конфликт путем обнаружения несоответствия. В зависимости от используемого языка это может быть либо ошибка сборки / компиляции, либо ошибка тестирования / выполнения / выполнения.
Если 2 изменения вызывают конфликт слияния (трехсторонний или нет), это означает, что конфликт является VCS, а не чисто функциональным, и да, он будет обнаружен инструментами на основе git и / или git, поэтому к нему нужно будет обратиться до того, как слияние будет разрешено (выполнение инструмента CI / CD не будет необходимо для его обнаружения)
На ваш второй вопрос ApartCI обнаружит любой вид конфликта: