Использование метаморфического кода для сокращения шаблонов - PullRequest
2 голосов
/ 06 августа 2010

Кто-нибудь видел метаморфический код - то есть код, который генерирует и запускает инструкции (включая байт-код IL и Java, а также собственный код) - используемый для сокращения стандартного кода?

Независимо от приложенияили язык, обычно один имеет некоторый код базы данных, чтобы получить строки из базы данных и вернуть список объектов.Конечно, есть множество способов сделать это на основе вашего коннектора базы данных.Вы можете в конечном итоге получить доступ к ячейкам строки по индексу (неудобно, потому что изменение «SELECT Name, Age» на «SELECT Age, Name» нарушит ваш код, плюс значение обфускации индексов), или используйте myObject.Age = resultRow.getValue ("Age") (неудобно, потому что это просто просматривает каждое поле, чтобы установить данные на основе столбцов).

В соответствии с темой базы данных, LINQ to SQL - это круто.Тем не менее, определение моделей данных не так здорово, особенно если в вашей базе данных так много таблиц, что SSMS не может перечислить все из них в браузере объектов.Кроме того, мне не нравится написание хранимых процедур или использование SQL;просто соединение объектов с базой данных.

Кто-то в компании, в которой я стажер, написал действительно потрясающий метод из нашего класса SqlCommand (который наследуется от System), который использует отражение .NET, с System.Reflection.Emit, чтобы сгенерировать метод, который бы устанавливал поля (украшенные атрибутом, содержащим имя столбца) для любого объекта модели с нулевым конструктором.Я бы посчитал это метаморфическим, потому что определенная часть программы пишет новые методы.

Этот шаблон генерации объектов из базы данных является лишь одним примером.Одна из них, с которой я столкнулся два дня назад, была поддержка связывания данных для SWT (через JFace).Я сделал эти совершенно чистые модели с помощью setAddress (Address address) и getName (), и теперь мне нужно загрязнить сеттеры с помощью fireChers PropertyChangeSupport и переносить экземпляр PropertyChangeSupport (даже если он находится в абстрактном базовом классе)!Затем я нашел PojoBindables , и теперь я чувствую себя в качестве связующего устройства уровня 80, просто потому, что мне нужно писать меньше.

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

1 Ответ

0 голосов
/ 07 августа 2010

Общее программирование может оказаться в вашем переулке.На веб-сайте Concept C ++ есть действительно хороший учебник, который охватывает абстракцию и поднятие, идеи, которые можно использовать на любом языке, и превращает шаблонный код в позитивную силу.Изучив кучу стандартных методов, которые практически одинаковы, вы можете получить набор требований, которые концептуально объединяют код («Чтобы X произошел, вы должны выполнить Y, поэтому чтобы X1 случился, вы должны выполнить Y с разницей 1»),Оттуда вы можете использовать шаблон, чтобы зафиксировать общие черты, и использовать входные данные шаблона, чтобы указать различия.На данный момент C # и Java имеют свои собственные реализации обобщений, так что, возможно, стоит проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...