При программировании на C # с использованием Visual Studio 2008 я часто желаю «автоматической» генерации кода. Если это возможно, я бы хотел добиться этого, вызвав мой файл решения MSBuild для Rake, который вызвал бы код Ruby для генерации кода, чтобы полученные сгенерированные файлы автоматически появлялись в моем решении.
Вот один бизнес-пример (из многих возможных примеров, которые я мог бы назвать), где этот вид автоматической генерации кода был бы полезен. В недавнем проекте у меня был интерфейс с некоторыми свойствами, которые содержали суммы в долларах. Я хотел второй интерфейс и третий интерфейс, которые имели те же свойства, что и первый интерфейс, за исключением того, что они были «квалифицированы» с именем подразделения. Примерно так:
public interface IQuarterlyResults
{
double TotalRevenue { get; set; }
double NetProfit { get; set; }
}
public interface IConsumerQuarterlyResults
{
double ConsumerTotalRevenue { get; set; }
double ConsumerNetProfit { get; set; }
}
public interface ICorporateQuarterResults
{
double CorporateTotalRevenue { get; set; }
double CorporateNetProfit { get; set; }
}
В этом примере есть «Потребительская бизнес-единица» и «Корпоративная бизнес-единица». Каждое свойство в IQuarterlyResults становится свойством «Corporate» + [имя свойства] в ICorporateQuarterlyResults, а также для IConsumerQuarterlyResults.
Зачем создавать интерфейсы для них, а не просто иметь экземпляр IQuarterlyResults для потребителя и другой экземпляр для корпоративного? Потому что при работе с объектом калькулятора, который я строил, пользователю приходилось иметь дело с сотнями свойств, и это намного менее сбивает с толку, если он может иметь дело с «полностью определенными» именами свойств, такими как «ConsumerNetProfit».
Но давайте не будем увязать в этом примере. Это только пример, а не главный вопрос.
Основной вопрос таков: Мне нравится использовать Ruby и ERB для генерации кода, и мне нравится использовать Rake для управления зависимостями между задачами. Чтобы решить вышеупомянутую проблему, я хотел бы, чтобы MSBuild вызвал Rake, и чтобы Rake / Ruby прочитал список свойств на «базовом» интерфейсе, а затем сгенерировал код для создания всех зависимых интерфейсов и их свойства. Это срабатывает каждый раз, когда я выполняю сборку, потому что я помещаю ее в файл MSBuild для решения VS.NET.
Кто-нибудь пробовал что-нибудь подобное? Как это сработало для вас? Что вы можете рассказать о плюсах, минусах, советах для достижения успеха и т. Д.?
Спасибо!