Плохая практика для сервисного слоя, чтобы иметь методы, которые не имеют дело с базой данных?

StackOverflow https://stackoverflow.com/questions/4295726

  •  28-09-2019
  •  | 
  •  

Вопрос

У меня есть следующие методы в моем пользователе

Public Interface IUserService
    Sub AddUser(ByVal claimedidentifier As String, ByVal notes As String)
    Function GetAllUsers() As IList(Of User)
    Function GetUserByID(ByVal id As Integer) As User
    Sub UpdateUser(ByVal user As User)
    Sub SubmitChanges()

    ''# Below are methods that do not require database calls.
    Function GetUserIPAddress() As String
    Function GetUserBrowser() As String
    Function GetUserOperatingSystem() As String
    Function GetUserSubDomain() As String
End Interface

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

Это считается плохой практикой?

Примечание. Мой слой репозитория строго справится с базой данных. Мой поток идет.

База данных> Linq (DBML)> Слой репозитория> Сервисный слой> Контроллер (или другое).

Это было полезно?

Решение

Пример, который вы представляли, это кажется плохой практикой. Если вы видите всю информацию, которую вы просите у вашего сервисного слоя, фактически доступны на самом контроллере. Почему вы хотите пересечь границу приложений, чтобы получить эту информацию?

Однако может быть допустимая причина иметь операцию на сервисном слое, который точно не имеет дело с БД.

В вашем случае я бы сказал использовать класс помощника чего-то вроде этого в контроллере.

Другие советы

@Predeep имеет точку зрения. Не кладите методы, принадлежащие в WebProject в сервисном слое. Вы просто добавляете другую зависимость.

Сервисный слой не должен быть просто слоем на верхней части слоя репозитория. Он может содержать логику изменение информации из базы данных или любого другого источника данных. Это совершенно нормально, чтобы добавить другие методы, которые не должны ничего делать с базой данных. Это то, для чего это слой. В противном случае вы могли бы просто пропустить этот слой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top