def dump(obj):
for attr in dir(obj):
print("obj.%s = %r" % (attr, getattr(obj, attr)))
существует много сторонних функций там, которые добавляют вещи как обработка исключений, национальная печать / печать специального символа, рекурсивно вызывающая во вложенные объекты и т.д. согласно предпочтениям их авторов. Но они все в основном сводятся к этому.
Что ж, эти двое - совершенно разные звери!
Subsonic 3 - отличный инструмент для простого и легкого сопоставления структуры базы данных примерно 1: 1 с классами объектов, где каждый класс будет точное представление таблицы в базовой базе данных (как и в случае с Linq-to-SQL).
Entity Framework, с другой стороны, нацелен на гораздо более сложные сценарии, в которых ваш домен или объектная модель (ваши классы) не обязательно будет отображать 1: 1 в таблицы базы данных. Вот почему в EF есть трилогия XML-файлов: один описывает концептуальный уровень (объекты вашего домена), второй уровень хранения (макет базы данных) и сопоставление между этими двумя.
IMHO, Subsonic 3 и Linq- to-SQL идеально подходят для быстрых проектов малого и среднего размера, где ваша база данных достаточно гибкая, чтобы при необходимости вносить изменения, и где у вас есть довольно простое отображение ваших объектов в таблицы. EF действительно сияет в крупномасштабных корпоративных приложениях, где уровень вашей базы данных может быть высечен в камне, и вы не можете его изменить - или ваше приложение должно «выжить», даже если база данных подзаголовка изменится.
На мой взгляд, совершенно разная аудитория.
Марк
PS: Интересно, действительно ли Тим использовал Subsonic 3 в этом сравнении и что именно он делал. Мне казалось, что EF будет иметь «большие» накладные расходы и, следовательно, может быть немного менее производительным (но более гибким, и в сценариях Enterprise это на вес золота, даже если ради этого жертвовать некоторой производительностью)
где уровень вашей базы данных может быть высечен в камне, и вы не можете его изменить - или ваше приложение должно «выжить», даже если подчиненная база данных изменится.Совершенно разные звери - совершенно разные аудитории, на мой взгляд.
Marc
PS: Интересно, действительно ли Тим использовал Subsonic 3 в этом сравнении и что именно он делал. Мне казалось, что EF будет иметь «большие» накладные расходы и, следовательно, может быть немного менее производительным (но более гибким, и в сценариях Enterprise это на вес золота, даже если ради этого жертвовать некоторой производительностью)
где ваш уровень базы данных может быть высечен в камне, и вы не можете его изменить - или ваше приложение должно «выжить», даже если подчиненная база данных изменится.Совершенно разные звери - совершенно разные аудитории, на мой взгляд.
Marc
PS: Интересно, действительно ли Тим использовал Subsonic 3 в этом сравнении и что именно он делал. Мне казалось, что EF будет иметь «большие» накладные расходы и, следовательно, может быть немного менее производительным (но более гибким, и в сценариях Enterprise это на вес золота, даже если ради этого жертвовать некоторой производительностью)
Интересно, действительно ли Тим использовал Subsonic 3 в этом сравнении и что именно он делал. Мне казалось, что EF будет иметь «большие» накладные расходы и, следовательно, может быть немного менее производительным (но более гибким, и в сценариях Enterprise это на вес золота, даже если ради этого жертвовать некоторой производительностью) Интересно, действительно ли Тим использовал Subsonic 3 в этом сравнении и что именно он делал. Мне казалось, что EF будет иметь «большие» накладные расходы и, следовательно, может быть немного менее производительным (но более гибким, и в сценариях Enterprise это на вес золота, даже если ради этого жертвовать некоторой производительностью)В случае, если это помогает, в моих тестах я использовал Subsonic 2.1 (как указано) и сравнивал уровни доступа к данным в сценарии умеренной нагрузки (методология, как указано). Я предоставил код, поэтому мой тест можно легко воспроизвести.
Если вы подвергаете систему нагрузке, воспроизводя условия в веб-приложении во время использования, EF обеспечивает гораздо лучшую производительность . Нагрузочные тесты всего веб-приложения подтверждают это. В более сложных тестах возможности оптимизации EF, такие как отложенная загрузка, могут предложить еще большие преимущества в производительности по сравнению с Subsonic.
Если вы сравните отдельные операции доступа к данным, например, в простом модульном тесте, Subsonic окажется быстрее. В частности, Subsonic инициализировался быстрее.
Я бы порекомендовал Fluent NHibernate или Entity Framework, если производительность является ключевым фактором.