Ответы пользователя по тегу ASP.NET
  • Как разместить REST методы в контроллере?

    Nipheris
    @Nipheris Куратор тега C#
    Контроллеры - это ваши проекции сущностей в сервисе (грубо говоря, объектов ваших классов бизнес-логики) на ресурсы веб-API, предоставляемого сервисом. Какие сущности проецировать на ресурсы, а какие - нет, целиком зависит от того, какое API вы хотите получить в конечном счете. В каких контроллерах это делать и стоит ли разбивать N контроллеров на M контроллеров - зависит от того, как вам удобно их реализовывать. Ну это примерно то же самое, что спросить "стоит ли разбивать 5 классов на 10?". У каждого контроллера - своя ответственность. Если вы четко понимаете ответственность каждого контроллера - разбивать не надо. Если вы перестали понимать и какой-то контроллер начал делать слишком много разных вещей - надо разбить.

    Нужно понимать, что лучше сначала спроектировать интерфейсы взаимодействия крупных компонент: клиентов и сервисов, а потом уже эти интерфейсы реализовывать. В случае REST, вы сначала проектируете REST API, исходя из задач вашего приложения, а потом уже реализуете сервис и клиент.

    методы реста post (добавление, обновление, удаление, просмотр)

    вот этой фразы не понял.
    Ответ написан
    4 комментария
  • Где разместить список используемых библиотек и фреймворков?

    Nipheris
    @Nipheris Куратор тега C#
    Откройте для себя NuGet, NPM и Bower.
    Ответ написан
    Комментировать
  • Каким образом с технологией ASP.NET MVC соотносятся языки программирования С# и VB.NET?

    Nipheris
    @Nipheris Куратор тега C#
    Ничего сложного.
    C# и VB.NET - языки программирования общего назначения, работающие поверх CLR (т.е., грубо говоря, на платформе .NET).

    ASP.NET MVC - веб-фреймворк для платформы .NET. По сути такая же библиотека классов, как и WinForms или WPF. Фишка ASP.NET в том что это поддерживаемый и развиваемый MS инструмент продакшн-уровня. Однако под дотнет есть и другие фреймворки, например Nancy или ServiceStack.

    Как уже упомянул Dmitry Pavlov , ASP.NET относится к C# как Rails к Руби, Django к Питону, и Spring к Джаве.
    Ответ написан
    Комментировать
  • Каким образом передавать данные от приложения WinForm к веб-серверу на asp.net mvc?

    Nipheris
    @Nipheris Куратор тега C#
    Да какой уж DDE)
    У сервера API для приема данных есть? Если нет, почему бы не взять WebAPI и не написать его, раз уж основное веб-приложение на ASP.NET MVC? Будет самым простым, логичным и совместимым вариантом, просто опубликуете вебапи рядом с приложением (не забудьте авторизацию сделать).
    Есть конечно и масса других вариантов, например если данные приходят часто и много (постоянный поток), то может лучше и какой-нибудь protobuf поверх обычного TCP соединения или веб-сокетов.
    Если нельзя взять и написать такой веб-сервис для приема данных, то что тогда можно? Какие у вас ограничения?
    Ответ написан
    2 комментария
  • Какие есть Best practice доступа к БД в C#?

    Nipheris
    @Nipheris Куратор тега C#
    1) https://habrahabr.ru/company/microsoft/blog/101121/
    Команда EF разъясняет, что Code First – не совсем корректное имя, и его не совсем правильно понимают. Правильнее было бы назвать Modeling using Code. Когда мы описываем модель непосредственно в C# коде, то разработчик код лучше всего понимает. Графический интерфейс Visual Studio теперь будет работать именно с Code First, а edmx более не поддерживается.

    Ну т.е. вроде понятно, что использовать в новых проектах.
    2) используйте репозиторий: codereview.stackexchange.com/questions/57401/repos... , только прошу вас, не делайте методов, принимающих Expression и возвращающих IQueryable - такой "репозиторий" совершенно не нужен и никак ничего не абстрагирует, а только вредит. Делайте методы на каждый конкретный тип запроса, принимающие конкретные ограничения для поиска, и возвращающие IEnumerable. Такие методы реально протестировать, и вы не получите дырявую абстракцию, которая будет выдавать вам внезапно ошибки в рантайме при нестандартных запросах на выборку сущностей. И самое главное - вы не будете зависеть от конкретной ORM.
    3) не забывайте, что никуда не девался ADO.NET и другие ORM, толстые например NHibernate, и не очень. Если вы в вашем приложении делаете к базе два запроса на вставку (какой-нибудь сервис телеметрии), ни к чему городить огород с ORM. Или если у вас олдскульная база с большим количеством хранимых процедур на сервере, то толстая ORM также ни к чему (какой-нибудь биллинг например).

    Если что еще вспомню, напишу.
    Ответ написан
    3 комментария
  • Как можно спорить на тему "ASP.NET WebForms против ASP.NET MVC"? Ведь эти технологии ПЕРЕСЕКАЮТСЯ?

    У вас крайне странная логика. Вам "позволили" удобства ради добавить в проект страницу на старом шаблонизаторе, и вы считаете, что это значит что WebForms это есть MVC? Я из описанных вами опытов увидел именно это.
    Да, MVC это архитектура, но ASP.NET MVC это прежде всего название технологии в целом, т.е. всей инфраструктуры и классов, обеспечивающих написание таких приложений. И шаблонизатор - это даже не главное, что стоит за понятием ASP.NET MVC
    Ответ написан
  • Какие книги читать в первый год обучения C#?

    Nipheris
    @Nipheris Куратор тега C#
    Работаю

    Коллеги ничего не подсказали? Обычно справшивают чтобы устроиться, а вы уже на производстве.
    Ответ написан
    Комментировать
  • Как правильно передавать объекты в N-layer архитектуре?

    Nipheris
    @Nipheris Куратор тега C#
    GenericRepository и его метод GetAll - это ни о чем. В том смысле, что вам такой репозиторий не нужен - он ничего не делает и ничего не абстрагирует. Вы выставляете IQueryable - и получаете проблемы на свою голову. Да, это очень соблазнительная штука, но таки репозиторий для того, чтобы все возможные запросы оставлять там, иначе они уходят далеко в логику приложения. Вам нужен конкретный репозиторий (интерфейс GenericRepository может и пригодится) с конкретными запросами, возвращающими IEnumerable. В этом и его суть - на уровне репозитория делается ПЕРВИЧНАЯ выборка (с помощью IQueryable), которая по сути есть запрос к БД и материализация всех НУЖНЫХ объектов, а потом уже мелкую фильтрацию можно делать с объектами в IEnumerable коллекции.

    Как организовать передачу сложных объектов (НЕ СУЩНОСТЕЙ) с уровня DAL на уровень BLL?

    Я бы сделал свой репозиторий для каждой такой вещи. Он будет ОТЛИЧАТЬСЯ от репозитория для сущностей, т.к. там не будет, например, Update. Это будет репозиторий ЗАПИСЕЙ, не объектов. В остальном все также - все возможные запросы нужно постараться собрать там. И класс тоже можно и нужно завести вроде BookReport, только он будет immutable, т.е. будет вести себя как запись. А дальше уже делайте с ним что пожелаете.

    Но если такая выборка находится в репозитории, получается метод репозитория должен возвращать List и уровень DAL будет связан с уровнем BLL.

    Вот тут не понял. Ну пусть возвращает List или IEnumerable, в чем тут вы связь видите?

    Вообще, возможно вам нужно поменьше париться о разделении DAL и BLL. Как правило это приводит к anemic data model, и ничего кроме вреда это вам не принисет. Вообще не знаю откуда эта мода пошла, у меня всегда получалось 80% логики оставлять в самих классах сущностей, и все было ок.
    Ответ написан
    1 комментарий
  • Есть ли бесплатное решение для экспорта из MS Excel в HTML таблицы на C#?

    Nipheris
    @Nipheris Куратор тега C#
    Какие-то сложные советы вам дали тут). Если вам не нужно особо навороченное форматирование, берите EPPlus и читайте Экселевский файл. Все что прочли - сами отрендерите в html. А в идеале лучше сделать два выходных конвертера для отчета - один, который сохраняет в Excel, а другой - в HTML, чтобы не играть в испорченный телефон.
    Не надо ничего декомпилировать и затирать, если библиотека платная, на то есть причины, пока все будут так делать, никто не будет относиться к бизнесу из России как к адекватному.
    Ответ написан
    Комментировать
  • Влияет ли using в C# на производительность?

    Nipheris
    @Nipheris Куратор тега C#
    Практическая польза - в читаемости кода. Когда начинаешь читать исходник, просматриваешь юзинги и понимаешь, какими сущностями тут собираются оперировать.

    А касаемо производительности - вы путаете компиляцию и интерпретацию, а также using как импорт имен и include как вставку содержимого другого файла.
    Компилятор C# разберется с используемыми именами еще на стадии компиляции, поэтому он либо все их однозначно сопоставит с полными именами, либо выдаст ошибку. Конечно, когда импортируется меньше имен, компиляция будет немного быстрее, но это а) не влияет на производительность скомпилированной сборки; б) куда менее важно, чем читабельность кода, которая пострадает первой от 30-ти using-ов в одном файле.

    Кстати, большое количество using это еще и сигнал о необходимости разбить исходный код на несколько файлов.
    Ответ написан
    Комментировать
  • Где хранить временные данные в ASP.NET MVC?

    Nipheris
    @Nipheris Куратор тега C#
    > Сразу в БД?
    Почему нет? Только не в основную, а например в Redis (polyglot persistence)
    Вы спросите нафига вам оно? Вот вам аргумент :).
    Ответ написан
    1 комментарий
  • Как быть с моделями в ASP.NET MVC?

    Nipheris
    @Nipheris Куратор тега C#
    Короткий ответ на ваш вопрос: Code First, Mappings.
    Длинный ответ: вам действительно нужно разобраться, что называть моделью.
    Лично я убежден, что модельные классы, представляющие из себя DTO - это по-любому anemic data model, а анемичная модель - это в 90% случаев нехорошо. Поэтому, у вас два варианта: отказаться от генерации "по картинке" в пользу Code First (рекомендую), либо пойти по пути Евгений Колегов - сказать, что EF-овская модель - это и не модель, а так, граф примитивных объектов с get/set-ами, а настоящая модель - вот она, обертка над ними, с реальной бизнес-логикой и т.д.

    > По сути эти модели - это DTO то есть просто объекты содержащие только данные. А как быть с логикой обработки этих данных? Она должна быть в контроллерах что ли?
    Ну это тот же самый вопрос: нормальная модель должна содержать логику.
    > в Asp.net mvc должны быть "тонкими", то есть не содержать особой логики.
    В контроллере - минимум, там логика специфичная не для бизнес-процессов, а для процесса работы самого web api, т.е. определение того, что нужно сделать с бизнес-сущностями, чтобы удовлетворить запрос.
    > Или надо писать еще и дополнительные контроллеры в которых будет сосредоточена логика работы с моделями?
    не стоит, думаю в вашей задаче такой дополнительный слой совершенно излишен.

    Резюме: модель вполне может и должна следовать обычным правилам ООП, известным уже лет 40 - данные и логика их обработки должны быть рядом друг с другом. Отделение бизнес-логики отдельно от модели - это такой своеобразный фетиш разбиения приложения на много-много слоев (на самом деле выделение веб-сервиса с четко определенным api - уже неплохой слой). Если вы чувствуете себя некомфортно от того, что у вас модель без логики, и не можете ее туда поместить - нужно менять инстурменты или вариант их использования. Первые версии EF - это первый блин комом, отсутствие поддержки Code First и нормальных маппингов считалось серьезной проблемой. Сейчас это уже давно в прошлом.
    Бонусные варианты, если вы не связаны ограничениями:
    1) генерация ТАБЛИЦ ПО КЛАССАМ, а не маппинг классов на таблицы: для кого-то этот вариант очень даже подходит, плюс упрощает менеджмент схемой БД: у вас всегда есть один источник сведений о схеме данных - это ваша модель. По ней можно всегда получить текущую SQL-схему;
    2) если вам нравится отдельно следить за объектной моделью и за SQL (я вот именно так люблю), можете посмотреть и на другие ORM - NHibernate вполне себе торт. Сейчас конечно EF более популярна, ибо стандартная и раскрученная, но я 4 года назад выбрал NH для своего проекта из-за отсутствия неприятных ограничений (например, NH умеет мапать даже на приватное поле, а EF тогда не умел) и из-за наличия вменяемых механизмов маппинга.
    Ответ написан
    Комментировать
  • Как реализовать веб-сервис двухфакторной аутентификации?

    Nipheris
    @Nipheris Куратор тега C#
    OAuth?

    OAuth provides client applications a 'secure delegated access' to server resources on behalf of a resource owner.
    Ответ написан
    Комментировать
  • Какая должна быть структура SQL запросов, учитывая текущего пользователя?

    Nipheris
    @Nipheris Куратор тега C#
    Направление мыслей верное, с технической точки зрения тоже. Не уверен насчет необходимости обновления апдейтов и делитов - если вы уже проверили UserId и выяснили, что запись принадлежит конкретному пользователю, и получили ее Id - то и удалять уже достаточно только по Id (за исключением, конечно, случая, когда вам нужно удалить ВСЕ записи конкретного пользователя).
    Правильность этого варианта зависит от вашей задачи. Если вам достаточно знать пользователя-владельца - то все хорошо, но если вы потом захотите более сложную систему доступа к записям - например давать и другим пользователям доступ к записям пользователя A, то и схема базы также усложнится.
    Ответ написан
    3 комментария
  • Сильные ли отличия между версиями ASP.NET MVC?

    Да чего вы паритесь, учите последнюю технологию. А если уж прям с нуля решили учить, то берите сразу ASP.NET 5 и MVC 6, они пока в превью, но я думаю довольно скоро будет релиз, в Update 1 или 2. А разработка под них будет отличаться довольно прилично от текущего workflow.
    Вы бы еще спросили, надо ли знать WebForms чтобы учить MVC). Ну конечно, если вы будете знать оно пригодится, для общего представления о развитии технологий, от чего к чему пришли.
    Ответ написан
    4 комментария
  • Какие проблемы решает Katana (OWIN)?

    Реальная проблема - зависимость от System.Web, которая, в свою очередь, слишком сильно завязана на IIS, и, если не ошибаюсь, на http.sys. Инженеры из Майкрософта (и их начальство тоже) хотят запускать новый asp.net на всех популярных платформах, чтобы подтянуться до уровня других популярных стеков технологий, такие как RoR или django. Чтобы зависимости от окружения было минимум, нужен суперлегкий интерфейс между веб-приложением и его окружением. В мире дотнета это и будет OWIN. Также как Rack в стеке руби.
    Если хотите чуть более пространно - вот я отвечал ранее на похожий вопрос.
    Ответ написан
    3 комментария
  • Как использовать ASP.NET Framework PHP программисту?

    veitmen muwilob
    > ASP.NET это legacy технология microsoft
    > Asp.Net технология создания веб приложений, еще известная как WebForms.
    Шта? Человека не путайте про legacy-технологии: www.asp.net/mvc, www.asp.net/vnext - это все тоже ASP.NET. А вот то, что называется ASP.NET WebForms - это да, это старая технология и сейчас ее не советуют использовать в новых проектах.
    Фрейморвки для PHP и то, что предлагает ASP.NET - вещи довольно разные, шарп и дотнет это больше для фирм и средних/больших проектов (хотя в vNext ситуация сильно поменяется, будем надеяться что по-сложности использования будет на уровне Ruby).
    Ответ написан
    4 комментария
  • Какой функционал сделать для приложения?

    Nipheris
    @Nipheris Куратор тега C++
    1) Сериализация и десериализация
    2) Работа с JSON и XML
    Можно одновременно и то, и другое покрыть, если сделать конфигурационный файл и сохранение настроек в него.
    3) Работа с потоками данных
    Вряд ли сможете обойтись без этого, вероятно вам понадобятся FileStream и NetworkStream для получения фида и сохранения на диск.
    4) LINQ
    Аналогично, если вы знаете что это такое - то будете использовать везде, где удобно, в любом приложении из более чем 30 строк кода есть foreach-и, которые можно заменить использованием LINQ.
    Ответ написан
    Комментировать
  • Как получить 2 таблицы в хранимой процедуре в SQL Server?

    Nipheris
    @Nipheris Куратор тега C#
    А какова цель использования хранимой процедуры только для получения данных? Я понимаю вы бы делали запросы на модификацию с добавлением логики, чтобы все это выполнить на стороне БД, а выборку-то зачем? Если есть конкретные причины, укажите, и подумаем как лучше сделать.
    Ответ написан