2

Я пытаюсь разработать приложение с следующими слоями:Entity Framework + Java Script Client

  1. Entity Framework Модель
  2. Service Data (или WCF или веб-API, но я предпочитаю Web API)
  3. Java Script + HTML + CSS Client

модель содержит наследования и полиморфных коллекции:

public class Master 
{ 
    public virtual ICollection<BaseDetail> Details { get; set; } 
} 

public abstract class BaseDetail 
{ 
    public virtual Master Master { get; set; } 
} 

public class Detail1 : BaseDetail { } 
public class Detail2 : BaseDetail { } 
public class Detail3 : BaseDetail { } 

Проблема заключается в том, что я не мог найти рамки Java Script подходит для моих нужд:

  1. отбрасывания
    • профи:
      • поддерживает наследование и полиморфные коллекции очень хорошо
      • опоры Веб-API & JSON (я думаю, что это проще, чем WCF & oData)
    • минусы:
      • не поддерживает метаданные EF. Вы должны дублировать модель в java-скрипте руками
      • не понимает JSON-сериализованную EF-модель достаточно хорошо. Вы должны предварительно, постобработки JSON
  2. Breeze.js
    • плюсы:
      • поддерживает метаданные EF очень хорошо. JS модель генерируется на лету
    • минусы:
      • не поддерживает наследование
      • не поддерживает WebAPI + JSON
  3. JayData
    • плюсы:
      • поддерживает EF meta данные достаточно хорошо
    • минусы:
      • , кажется, что он поддерживает наследование, но не поддерживает полиморфные коллекции
      • не поддерживает WebAPI + JSON

Есть ли другие альтернативные JS-рамки? Или, может быть, я ошибаюсь в названных рамках? Можете ли вы привести пример? Благодаря!

+1

Почему вы думаете, что поддержка метаданных breezejs очень хорошо, и jaydata достаточно хорошо? (Я работаю для jaydata) –

+0

Поскольку он генерирует JavaScript-модель «на лету». Не нужно вызывать JaySvcUtil.exe. Но я думаю, что это очень субъективное преимущество ... Модель не меняется слишком часто, и это не проблема вызова утилиты. – Denis

+0

Спасибо за разъяснение! На самом деле мы можем сделать оба пути с помощью предварительно сформированной модели и без нее. Синтаксис для получения контекста несколько отличается. В большинстве наших примеров используется статическая схема, которая может вводить в заблуждение, извините за это. Если вы используете jaydata в качестве клиента odata в nodejs в окнах, мы поддерживаем только статический контекст, так как libxmljs не компилируется на окнах. –

ответ

6

Редактировать: Начиная с версии 1.3.1 Breeze теперь поддерживает наследование.

-

Что касается Breeze, вы правы, что это делает (пока) не поддерживает наследование. Это на дорожной карте Бриза, и вы можете захотеть vote it up.

Он поддерживает API-интерфейс ASP.NET и JSON. Любопытно, что вы думали иначе, учитывая, что почти все образцы BreezeJS являются примерами Web API, которые полагаются исключительно на тип содержимого JSON.

+0

Да, 3 голоса - мои. Я имею в виду, что образцы контроллеров (вы говорите) не являются истинными REST. Отсутствуют get/put/post/delete, только oData в них. Поэтому я думаю, что это неправда. Web API. Просто вариант службы данных WCF. – Denis

+0

Вы тоже правы насчет JSON. Но я имею в виду, что это не простой, простой JSON, он содержит метаданные. Например, этот JSON несовместим с Backbone. – Denis

2

Поддержка JayData для WebAPI доступна с Microsoft Web API OData extension. Хотя вам нужно настроить серверную сторону с точки зрения контроллеров, маршрутов и т. Д.

Мы будем очень рады работать с полиморфными коллекциями с приоритетом, в настоящее время мы находимся прямо в процессе реализации OData V3. Откройте проблему на http://github.com/jaydata, чтобы мы могли связаться с вами по деталям.

+0

Спасибо, я добавил предложение. – Denis