Перезапись устаревшего- проприетарное веб-приложение для MVC3 / Entity-Code-First

За несколько месяцев я отправил несколько вопросов о структуре приложений ASP.NET и слоях абстракции базы данных с целью переписывания (с нуля) устаревшего веб-приложения. . Я недавно наткнулся на MVC3 / Entity-Code-First и, потратив некоторое время на него, влюбился в то, как он работает, как вещи абстрагируются, и я ' я ищу любой повод использовать его!

Унаследованное приложение представляет собой службу Windows на C ++ / CLI, которая генерирует собственный HTML (очень старый HTML с CSS, который используется только для цветов и множества таблиц), и с интерфейсом, очень тесно связанным с бизнес-логикой. В принципе, все будет улучшаться.

Однако, возможно, это связано с тем, что я еще не провел достаточно времени с MVC, у меня есть несколько мучительных сомнений, и я подумал, могут ли некоторые из вас, MVC-профессионалов, поделиться своим опытом в мое направление.

  • Устаревшее приложение использует настраиваемые элементы управления (его собственная форма) для привязки полей со списком к данным и динамического повторного заполнения зависимых полей со списком на основе выбора в другом. В ASP.NET на этот вопрос легко ответить, просто добавив элемент управления asp: DataList на страницу, привязывая его к источнику данных и вуаля. Немного простого кода позволяет вам затем фильтровать другие поля со списком по выбранному значению. В ASP.NET также было бы легко реализовать другой список данных, который даже автоматизировал бы зависимые данные таким образом (что довольно хорошо имитировало бы поведение устаревшего приложения). Кажется, я не могу найти понятия настраиваемых элементов управления в MVC, хотя предполагаю, что такие вещи обрабатываются вызовами jQuery для получения данных и их добавления в поле со списком. Но выполняется ли это для каждого поля со списком на каждой странице, на которой оно есть? Это случай частичных представлений с передаваемыми соответствующими параметрами или это просто глупо?

  • Думаю, это больше относится к Entity Framework, чем к MVC, но большинство примеров, которые я нашел в Интернете, и руководств выполняются Запросы LINQ для возврата коллекции объектов для отображения, например, из примера MvcMovie: { var movies = from m in db.Фильмы где m.ReleaseDate> new DateTime (1984, 6, 1) выберите m; return View (movies.ToList ()); }

    Которая затем отображается с использованием цикла @foreach в представлении. Это все здорово. Унаследованное приложение имеет одну страницу просмотра, которая используется всеми другими областями системы (их более 50). Он делает это, проверяя порядок столбцов, определенный для пользователя, вошедшего в систему, сглаживая любые внешние ключи (так, чтобы отображалось поле внешней таблицы, а не удобное для пользователя значение первичного ключа), а также позволяет пользователю применять настраиваемые фильтры для любого столбца. Он делает это также для таблиц, содержащих более 100 тыс. Строк. Как можно было бы написать что-то подобное, используя Entity-framework и представления? В ASP.NET я бы, вероятно, решил эту проблему, динамически генерируя какое-то представление сетки и заставляя его автоматически генерировать столбцы и применять фильтры. Кажется, мне больше поработать в MVC. Я что-то упустил?

  • В устаревшем приложении есть несколько операций, которые работают с большими наборами данных. Теперь, поскольку это была служба, она могла запускать эти потоки, не беспокоясь о завершении работы. Один из моих вопросов, касающихся SO, касался присутствия статических менеджеров и внедрения утилиты AppPool, но я решил, что наличие вспомогательной службы - хороший вариант. Тем не менее, устаревшее приложение применяет оператор обновления к большим группам записей, а не к отдельным строкам. Возможно ли это с Entity-Framework без написания пользовательского SQL для базы данных, который обходит обычные модели? Надеюсь, мне не придется делать что-то подобное (я бы не стал, это просто для примера)

     var records = from rec в myTable Теперь, поскольку это была служба, он мог запускать эти потоки, не беспокоясь о завершении работы. Один из моих вопросов, касающихся SO, касался присутствия статических менеджеров и внедрения утилиты AppPool, но я решил, что наличие вспомогательной службы - хороший вариант. Тем не менее, устаревшее приложение применяет оператор обновления к большим группам записей, а не к отдельным строкам. Возможно ли это с Entity-Framework без написания пользовательского SQL для базы данных, который обходит обычные модели? Надеюсь, мне не придется делать что-то подобное (не то, чтобы я, это просто для примера) 
    
    
     var records = from rec в myTable Теперь, поскольку это была служба, он мог запускать эти потоки, не беспокоясь о завершении работы. Один из моих вопросов по SO касался присутствия статических менеджеров и внедрения утилиты AppPool, но я решил, что наличие вспомогательной службы - хороший вариант. Тем не менее, устаревшее приложение применяет оператор обновления к большим группам записей, а не к отдельным строкам. Возможно ли это с Entity-Framework без написания пользовательского SQL для базы данных, которая обходит обычные модели? Надеюсь, мне не придется делать что-то подобное (я бы не стал, это просто для примера) 
    
    
     var records = from rec в myTable но я решил, что вспомогательная служба - хороший вариант. Тем не менее, устаревшее приложение применяет оператор обновления к большим группам записей, а не к отдельным строкам. Возможно ли это с Entity-Framework без написания пользовательского SQL для базы данных, который обходит обычные модели? Надеюсь, мне не придется делать что-то подобное (я бы не стал, это просто для примера) 
    
    
     var records = from rec в myTable но я решил, что вспомогательная служба - хороший вариант. Тем не менее, устаревшее приложение применяет оператор обновления к большим группам записей, а не к отдельным строкам. Возможно ли это с Entity-Framework без написания пользовательского SQL для базы данных, которая обходит обычные модели? Надеюсь, мне не придется делать что-то подобное (я бы не стал, это просто для примера) 
    
    
     var records = from rec в myTable
     где someField = someValue
     выберите rec;
    foreach (запись в записях)
     rec.applyCalculation ();
    db.SaveDbChanges ();
    

    Я подозреваю, что это может занять много времени, тогда как устаревшее приложение просто сделало бы:

     ОБНОВИТЬ myTable
    SET field1 = calc
    ГДЕ someField = someValue
    

    Поэтому мне не совсем понятно, как мы используем наши модели таким образом.

  • В устаревшем приложении есть несколько панелей данных в макете, которые переносятся на любую страницу, на которой вы находитесь. Глядя здесь на Stackoverflow, я нашел этот вопрос, который подразумевает, что каждое представление должно передавать эту информацию в макет? Так ли это или есть способ лучше? В идеале я бы хотел, чтобы мой макет имел доступ к конкретной модели / репозиторию и отображал данные на боковой панели. Добавление на каждую страницу просмотра может быть довольно повторяющимся и подверженным ошибкам. Не говоря уже о времени, которое потребуется, если мне понадобится что-то изменить. Здесь подойдет частичный вид, но опять же я не уверен, как передать ему модель на странице макета.

  • Наконец, я был разочарован, после установки Ef-Code-First, чтобы найти действительно хороший атрибут, SourceName еще не вошел. Это было бы очень хорошо при сопоставлении с устаревшими таблицами / столбцами, и я не совсем уверен, почему он был исключен на данный момент (по крайней мере, мой intellisense говорит, что его нет!) Кто-нибудь знает, когда это может произойти? Некоторое время я мог бы обойтись без него, но в конечном итоге это было бы невероятно полезно.

Извините за длинные вопросы. После многих лет исследовательской работы в ASP.NET и MVC3 я действительно хочу перейти на MVC3!

7
задан Community 23 May 2017 в 12:14
поделиться