Не уверенный, что произошло с Полужирным/экологическим во время Borland/Codegear/Embarcadero перехода, но меня верная мисс это в более новых версиях Delphi. Кто-либо знает о платформе, которая приближается?
В противном случае, возможно, Вы могли предложить комбинацию библиотек и компонентов, который приближается.
hcOPF кажется единственной реальной ORM для Delphi win32, но она еще не приблизилась.
Для моделирования UML и подобного для Delphi win32 (или C #) я рекомендую Model Maker .
Оба инструмента поддерживают Delphi 2010.
- Джерун
Альтернативой является список OPF для Delphi win32 (с кратким описанием каждого из них).
Я когда-либо использовал только Bold для Delphi (и до сих пор использую), но я не думаю, что какая-либо из альтернатив даже близко подходит по набору функций. И это, я полагаю, является ключевым, какие функции важны для вас? Если вам не нужно все, что предлагает Bold, возможно, вы остановитесь на одной из альтернатив.
В качестве альтернативы, вы все еще можете использовать Bold, последний выпуск - Bold для Delphi 2006 и надеяться, что Embarcadero в конечном итоге откроет исходные коды для него или продолжит разработку. Пользователь постоянно пытается что-то сделать с помощью Bold, но Embarcadero, похоже, хорошо справляется с давлением.
Начать редактирование / обновление:
С тех пор, как этот ответ был опубликован, фреймворк был значительно улучшен, особенно для предоставления всех необходимых функций для реализации true Domain-Driven Design :
Службы на основе интерфейса
, аналогично WCF ; http.sys
HTTP-сервер, управляемый событиями, работающий в режиме ядра; Со всеми преимуществами Delphi, то есть небольшим и быстрым исполняемым файлом, отсутствием времени выполнения / фреймворка, предоставленным всем исходным кодом (без подхода «черный ящик»), без конкретной ОС или дополнительных затрат.
См. эту статью в блоге , чтобы узнать, как mORMot , вероятно, является первым фреймворком Delphi, предоставляющим все элементы, необходимые для реализации доменно-ориентированного проектирования. С более легким и быстрым решением, чем "классические" реализации Java или .Net.
Конец редактирования / обновления
Я разработал структуру на основе ORM RESTful JSON, использующую SQlite3 для обеспечения устойчивости базы данных.
Конечно, он не так полон, как Bold или OPF (без UML или OCL), но он работает и тестируется с Delphi 7 до Delphi 2010. И он все еще поддерживается и будет всегда, потому что он бесплатный и открытый источник.
У вас есть интересные функции, такие как создание интегрированного пользовательского интерфейса и i18n, создание отчетов и экспорт в PDF, клиент-серверные сервисы, интегрированное модульное тестирование. Он использует JSON для передачи данных и архитектуру RESTful для внутрипроцессного взаимодействия, сообщения Windows GDI, именованные каналы или HTTP / 1.1. Таким образом, его можно было использовать для разработки приложений AJAX.
Эта структура изящно интегрируется с нашим инструментом SynProject, который создает документацию из исходного кода, с красивыми графиками и полной прослеживаемостью документов (он использовался для выполнения требований IEC 62304 для медицинского программного обеспечения, которое мы написали с помощью этой структуры). Итак, у вас нет UML, но у вас есть документация и схемы.
Если вас интересуют ORM и Delphi, добро пожаловать в приключение с открытым исходным кодом! http://blog.synopse.info/category/Open-Source-Projects/SQLite3-Framework
Это один из самых больших недостатков в сегодняшней Delphi. Наличие только старой парадигмы TDataset
недостаточно для сложных проектов.
Написать простую активную запись в Delphi 2010 не сложно. Но для сложного проекта нужен какой-то datamapper с внешним конфиг-файлом.
Я пишу простой Hibernate для Delphi (DORM aka Delphi Object Relational Mapper). Если кто-то хочет поучаствовать, отправьте письмо по адресу d [dot] teti at bitTime [dot] it.
например, ниже приведен юнит-тест для DORM
procedure TTestDORM.TestUpdate;
var
p: TPersona; //TPersona is a PODO "Plain Old Delphi Object" TObject descendat
guid: string;
begin
p := TPersona.Create;
p.Nome := 'Daniele';
p.Cognome := 'Teti';
p.Eta := 30;
p.DataDiNascita := EncodeDate(1979,11,04);
Session.Save(p); //DORM do an INSERT
guid := p.guid;
Session.Commit;
Session.StartTransaction;
p := Session.Load(TypeInfo(TPersona), guid) as TPersona; //DORM do a SELECT
p.Nome := 'Peter';
Session.Save(p); //DORM do an UPDATE
Session.Commit;
CheckEquals(1, Session.Count(TPersona));
p := Session.Load(TypeInfo(TPersona), guid) as TPersona; //DORM do a SELECT
CheckEquals('Peter', p.Nome);
end;
Кто-то заинтересован?