ASP.NET 4.0: Что дальше?

Комментарии отсутствуют

Посмотрел на днях презентацию c конференции MIX ASP.NET 4.0: What's Next?, которую проводил Stephen Walter (Senior Program Manager at Microsoft). Должен сказать, что улучшения в следующей версии ASP.NET, а также в Visual Studio 2010, приятно удивили. Что же нового нам готовит ASP.NET 4.0?

Реализация наследования в NHebirnate (table-per-class-hierarchy)

Комментарии отсутствуют

Возникла необходимость сохранять в базу с помощью NHebirnate такую вот структуру классов:
class diagram
Таблица для сохранения обьектов обоих классов используется общая

Product table
Ключевым моментом в реализации наследования (table-per-class-hierarchy) в NHebirnate является элемент discriminator. Используя этот элемент можно указать колонку в базе данных, с помощью которой будут различаться обьекты.
Что же получается?! Смотрим маппинг файл базового класса:

[code=xml]<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" namespace="Test.Product" assembly="ProductTest">
    <class name="Test.Product,ProductTest" table="Product">
        <id name="Id" type="Guid">
            <generator class="identity" />
        </id>
        <discriminator column="Type"
                not-null="true"
                type="System.String"/>
        <property name="Title" type="string" />
        <property name="Description" type="string" not-null="false" />
    </class>
</hibernate-mapping>[/code]
Чтобы всё заработало в таблице Product создаём колонку Type типа nvarchar (размер по желанию). В дочернем маппинг файле описываем дополнительные свойства:

[code=xml]<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
    <subclass name="Namespace, Class" extends="Test.Product, BookTest" discriminator-value="Book">
        <property name="ISBN" type="String" not-null="false"/>
        <property name="Author" type="String" not-null="false"/>
        <property name="PublishDate" type="DateTime" not-null="false"/>
    </subclass>
</hibernate-mapping>[/code]
Также указываем значение discriminator-value. Именно по этому значению будет определяться принадлежность записи таблицы к тому или иному классу.

Yetanotherforum - форум с открытым исходным кодом на ASP.NET

1 комментарий

Некоторое время назад, когда я писал дипломную работу, помнится одним из необязательных заданий в дипломе был форум. К сожалению, времени на создание своего форума тогда совсем не было. Поиск же существующих бесплатных разработок на ASP.NET ни к чему не привёл и, соответственно, диплом остался без форума.

Сегодня чисто случайно наткнулся вот на такую разработку yetanotherforum.net .  Тестовый вариант можно посмотреть здесь.

Yetanotherforum - форум с открытым исходным кодом на ASP.NET

YetAnotherForum.NET (YAF) - это open source форум, предоставляемый под лицензией GPL, более детально на сайте разработчиков.

Размер архива с исходниками 1,58.

Что означает дружественные сборки?

2 коментари(и/ев)

Что означает дружественные сборки?Как известно, чтобы получить доступ к классу из другой сборки, этот класс должен быть обьявлен как public. Однако такие действия не всегда являются лучшим решением, так как в результате классом может воспользоваться кто угодно. Существует и другой модификатор доступа  - internal. Пометив класс как internal, область его видимости ограничивается сборкой в которой он обьявлен. Иногда же возникает необходимость объединить эти два подходы, то есть класс должен быть видим только внутри сборки, где он определён, и в некоторых случаях вести как public. Хорошим пример может послужить разбиение приложения на слои (layer), где каждому слою соответствует отдельная сборка. До появления .NET Framework 2.0 единственным выходом из этой ситуации было определения класса как public, но с выходом последнего появился специальный атрибут InternalsVisibleTo, который позволяет делать сборки "дружественными".

Например, у нас есть сборка А, классы которой помечены как internal. Для того чтобы сборка В могла обращаться к internal классам сборки А, в последнюю нужно добавить атрибут

[code=c#][assembly: InternalsVisibleTo("'имя сборки В', PublicKey='публичный ключ'")].[/code]

Применение данного атрибута распространяется как на internal классы, так и на методы, свойства.

PS: использовать данный атрибут можно и в юнит-тестах, когда необходимо протестировать internal методы. Кстати, майкрософтовцы и сами широко используют данный атрибут, как пример сборка System.Data, посмотрите рефлектором.

Блог умер?!

7 коментари(и/ев)

Блог умер?!Как все могли заметить, последний месяц вышел совсем непродуктивным (3 поста за ноябрь - это слишком мало). Но этому есть ряд причин, хотя последние, как по мне, скорее отмазка. Главное чем я занимался - это готовился к экзамену 70-536 Microsoft .NET Framework - Application Development Foundation.

Так сложилось, что после сдачи в октябре экзамена 70-528, начальство порекомендовало сдать ещё один. Зачем?! Сложный вопрос... Возможно, чтобы просто оттянуть повышение зарплаты, надеясь на то, что следующий экзамен я соберусь сдавать не в скором времени. А возможно действительно во внимание принимается только получение статуса Microsoft Certified Technology Specialist (MCTS). Вообщем, ответы на все вопросы я получу в ближайшем будущем, так как уже через несколько дней мне предстоит сдать второй экзамен (70-536). Вот тогда-то всё и станет на свои места. Пока я надеюсь на лучшее и то, что было обещано, будет выполнено.

По экзамену. Подготовка к этому экзамену выдалась на много интересней. Я наконец-то прочитал книгу Рихтера "CRL via C#", которую купил года два назад. Это мне принесло наибольшее удовольствие. Изо всех книг по .NET Framework, которые есть у меня (2 издания Троелсена, Дейтел и т.д.) - эта на голову выше. Как по мне, она достойна внимания каждого .NET-разработчика.

Как показала подготовка, за более чем два года работы на .NET Framework, мне приходилось использовать далеко не все его возможности. 100%-новой темой для меня оказалась Code Access Security (CAS), до экзамена я даже и не догадывался об существовании таких возможностей. Наконец-то более детально разобрался с потоками, синхронизацией доступа к данным на основе блокировок, асинхронной моделью программирования, доменами, отражением, вообщем, со всем, для чего раньше нехватало времени.

Как и предидущая книга по 70-528 от Майкрософта, для 70-536 экзамена оказалась не лучше. К сожалению, её всё-таки пришлось читать, так как некоторый материал был изложен только в ней. 

На протяжении всего времени, для лучшего запоминания материала, составлял краткие заметки, которых в итоге собралось на 14 вордовских страниц. В ближайшем будущем постараюсь довести их до ума и выложить на блоге. Так же насобирал порядка 30 интересных вопросов по основам .NET Framework, на которых, сообственно, и собираюсь сконцентрировать свое внимание.

PS: блог снова оживает, я надеюсь.... :)

Следующая страница