Действительно ли я могу абстрагировать Платформу Объекта далеко от моих Объектов?

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<style type="text/css">

body {
      margin:0px;
     }


main {
      margin: 1cm auto;
      width: 50%;
      padding: 1cm;
      border: 1px solid black;
     }


 nav {
     border: 1px solid black;
     }
</style>
</head>

<body>

<nav>
   <label>Name: <input type="text" name="name"> </label>
   <label>Surname: <input type="text" name="surname"> </label>
</nav>

<main>
   <h1> Welcome! </h1>
   <p> This is your first page </p>
</main>

 <footer> Service Networking </footer>
</body>


</html>

Вы использовали <footer>, до nav и main.

9
задан urig 29 March 2009 в 15:03
поделиться

5 ответов

Общее понятие, к которому Вы обращаетесь, является "незнанием персистентности" (PI), хотя это обычно применяется непосредственно к самим объектам, а не коду, который использует объекты.

В любом случае Будьте в спящем режиме, и NHibernate исходно поддерживают PI, но начальная версия Платформы Объекта Microsoft не делает. MS получил много взбучки для этого, и PI является, вероятно, № 1 наиболее обсужденная функция следующей версии (каждый раз, когда это).

До какого Вы пытаетесь сделать с интерфейсами, набор Панелей должен быть изменен после того, как он получен? Если ответ да, нет никакого легкого ответа. Даже ковариантность не могла помочь Вам здесь потому что ICollection<T> имеет Добавить метод.

Если набор только для чтения, то Вы могли бы рассмотреть представление его как IEnumerable<IBar>. Enumerable.Cast метод делает это довольно удобным.

interface IFoo
{
    IEnumerable<IBar> Bars { get; }
}

partial class Foo : IFoo
{
    IEnumerable<IBar> IFoo.Bars
    {
        get { return Bars.Cast<IBar>(); }
    }
}

Кроме того, я знаю о по крайней мере одном усилии сделать текущую версию незнания персистентности поддержки EF.

8
ответ дан 4 December 2019 в 13:05
поделиться

Я - Java-разработчик, таким образом, я не могу прокомментировать ни с какими полномочиями Платформу Объекта. Я могу сказать Вам, что решениям ORM нравится, в спящем режиме, позволяют иметь персистентность POJO, не имея необходимость обращаться к общим абстрактным классам, интерфейсам, или изменяя код байта. Это обрабатывает отношения как 1:m, Вы цитируете для своего Foo и Bar, не имея необходимость использовать специальные классы набора.

Специальный соус воплощен в отображающуюся конфигурацию, и Будьте в спящем режиме саму.

Немного то, что я читал о Платформе Объекта, предполагает, что это - решение ORM с той же целью: ПОСТЕПЕННО персистентность. Я не видел упоминания об интерфейсах. Я не вижу потребность в них от Вашего примера, потому что это слишком абстрактно.

Я вывожу, что возможно получить ту независимость между бизнес-объектами и уровнем персистентности, не имея необходимость обращаться к тем интерфейсам, потому что я знаю, в спящем режиме, делает это. Я сказал бы, что решение Spring JDBC выполняет его также, потому что нет никакой потребности в единых интерфейсах. Они используют конструкцию RowMapper для переправления данных из запроса и в объект.

Мне бы хотелось советовать Вам точно, как сделать это с Платформой Объекта, но возможно Вы наберетесь храбрости, зная, что это может быть сделано.

2
ответ дан 4 December 2019 в 13:05
поделиться

Используйте частичный класс для разделения логики и правил от автоматически сгенерированных объектов EF. В примере ниже FooEntityObject класс разделяется на два использования частичного ключевого слова. Я использовал эту технику прежде с EF и LINQ к SQL. Частичные классы могут быть сохранены в отдельных файлах поэтому, если Ваш повторно создавать Ваш EF возражают снова, что Ваш пользовательский код не становится перезаписанным.

interface IFoo
{
    public ICollection<IBar> GetBars();
}

public partial class FooEntityObject : IFoo
{
    public ICollection<IBar> GetBars()
    {
        // convert EntityCollection<Bar> into ICollection<IBar> here
    }
}


public partial class FooEntityObject
{
    EntityCollection<Bar> Bars{get;set;}
}
2
ответ дан 4 December 2019 в 13:05
поделиться

Недавно я написал подробный пост об этом: Невосприимчивость к постоянству в ADO.NET Entity Framework . Возможно, вы захотите взглянуть на EFPocoAdapter. Это делает именно это, и в конечном итоге он устареет в EF v2.

Для чего это стоит, я использую EFPocoAdapater, и он хорошо работает для меня.

2
ответ дан 4 December 2019 в 13:05
поделиться

Мы делаем то же самое для LINQ to SQL. Я решил проблему с коллекцией, написав класс, который обертывает IList и, при необходимости, приводит к правильному типу и обратно. Это выглядит примерно так:

public class ListWrapper<TSource, TTarget> : IList<TTarget>
    where TTarget : class
    where TSource : class, TTarget
{
    private IList<TSource> internalList;

    public ListWrapper(IList<TSource> internalList)
    {
        this.internalList = internalList;
    }

    public void Add(TTarget item)
    {
        internalList.Add((TSource)item);
    }

    public IEnumerator<TTarget> GetEnumerator()
    {
        return new EnumeratorWrapper<TSource, TTarget>(internalList.GetEnumerator());
    }

    // and all the other IList members
}

EnumeratorWrapper аналогично оборачивает IEnumerator и выполняет приведение. В частичных классах LINQ to SQL мы представляем свойство следующим образом:

public IList<ICustomer> Foos
{
    get
    {
        return new ListWrapper<Foo, IFoo>(this.Foos_internal);
    }
}

Любые изменения в представленном списке будут выполняться во внутреннем EntitySet, поэтому они будут синхронизированы.

Это работает достаточно хорошо, но я чувствую, что весь этот подход доставляет больше хлопот, чем стоит, я большой поклонник NHibernate и большой сторонник PI, но мы приложили МНОГО дополнительных усилий, делая это и убежище действительно не видел никакого преимущества. Мы используем шаблон репозитория, чтобы абстрагироваться от фактического доступа к DataContext, который, я бы сказал, является ключевой частью отделения нас от LINQ to SQL.

2
ответ дан 4 December 2019 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: