Я бы, вероятно, подумал о том, чтобы адреса происходили от объекта базового адреса, который имеет типичные имена для свойств и / или, возможно, переопределяемый метод для установки соответствующих деталей. Ваш синтаксический анализатор может обрабатывать любую переменную сущность как базовый тип адреса и устанавливать свойства, и унаследованная реализация получит указанные c имена:
public class BaseAddress{
protected string _buildingName;
protected string _zipCode;
public void SetAll(string b, string z){ // call this in your parser
_buildingName = b;
_zipCode = z;
}
}
public class WorkAddress:BaseAddress{
public string Factory => _buildingName;
public string PostCode => _zipCode;
}
public class HomeAddress:BaseAddress{
public string HouseName => _buildingName;
public string Zip => _zipCode;
}
Может даже иметь смысл встроить процедуру синтаксического анализа в базовый класс, добавляя переопределения только там, где есть существенное различие в операции
В этом смысле вам не нужно иметь метод generi c, который принимает все ваши различные типы адресов, когда вы можете иметь методы что взять BaseAddress. Я пропустил свойства для BaseAddress, но если вы будете работать с BaseAddress таким образом, было бы целесообразно добавить их - это было просто «мой контекст БД ожидает, что фабричные адреса, хранящиеся в фабричной таблице, будут иметь эти столбцы и домашнюю страницу». адреса должны иметь эти столбцы .. "
В качестве альтернативы, что-то вроде Automapper может быть настроено так, чтобы иметь возможность отображать несколько различных типов объектов адреса на общий и обратно, особенно если это проблема, когда вы пересекаете границу прикладных слоев