Генератор кода в C # - PullRequest
       28

Генератор кода в C #

1 голос
/ 25 октября 2009

Мне нужно разработать многоязычный генератор кода на C #. На самом деле идея заключается в том, что у нас есть несколько собственных структур приложений для доступа к базам данных на разных языках (Java, Python, C ++). Но их основной принцип работы тот же. И мы считаем, что генератор кода поможет нам сократить время разработки. Поэтому я решил написать генератор кода для простоты нашей разработки.

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

Должен ли я использовать \t, \r, \n?

Какими методами можно достичь максимальной скорости?

Я не хочу использовать RegEx.

Пожалуйста, дайте мне знать из вашего личного опыта.

Ответы [ 2 ]

4 голосов
/ 25 октября 2009

Это действительно зависит от того, что вы имеете в виду; Есть много вариантов:

  • CodeDOM - предоставляет объектную модель, которая может генерировать код для нескольких языков, но может быть сложно использовать
  • T4 (он же TT) - кодекен моды "в моде"
  • xslt - полезный запасной вариант; не так модно, как T4, но работоспособно - хитро для языков, зависящих от пробелов, таких как VB

Во всех случаях я бы построил базовую объектную модель, которая представляет данные и будет работать оттуда. Я знал, что кто-то писал code-gen из базы данных только с SELECT, но это было безобразно, как грех, и крайне болезненно поддерживать.

Отвечайте на ваши вопросы о \t, \r, \n и т. Д. - я не понимаю вопроса, но: что бы ни хотел целевой язык! VB здесь сложнее (C # и т. Д. Проще, так как они не заботятся о пробелах).

Я успешно использовал xslt, но в основном потому, что уже знал xslt, и мне нужно было поддерживать 2.0 (T4 отсутствует в 2.0); иначе Т4 был бы моим следующим ударом, просто потому, что я хочу изучить его; -p

1 голос
/ 24 декабря 2009

Кажется, вам нужны возможности шаблонирования, поэтому T4, как предположил Марк Гравелл, довольно хорош. SubSonic в настоящее время использует T4 для генерации кода. В прошлом SubSonic использовала Asp.Net в качестве системы шаблонов для генерации кода.

Это может показаться немного за пределами левого поля, но у Джона Резига есть функция mirco-template , которую он написал для Javascript, который позволяет вам обрабатывать шаблоны, имеющие синтаксис вроде:

<script type="text/html" id="item_tmpl">
  <div id="<%=id%>" class="<%=(i % 2 == 1 ? " even" : "")%>">
    <div class="grid_1 alpha right">
      <img class="righted" src="<%=profile_image_url%>"/>
    </div>
    <div class="grid_6 omega contents">
      <p><b><a href="/<%=from_user%>"><%=from_user%></a>:</b> <%=text%></p>
    </div>
  </div>
</script>

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

...