Alguém tem um artigo bom ou bom conselho para nomeação de classe para aplicações web n-tier?

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

  •  02-07-2019
  •  | 
  •  

Pergunta

Eu estou acostumado com o layout que LLBLGen dá quando gera objetos com base em uma estrutura de banco de dados, o que pode gerar os seguintes arquivos de classe para uma determinada tabela "Usuário" no banco de dados:

/EntityClasses/UserEntity.vb
/CollectionClasses/UserCollection.vb

Isto fornece alguma funcionalidade básica para acesso a dados. No entanto, quando você deseja implementar a lógica de negócios em cima disso, como você está colocando as coisas? Por exemplo, dada uma estrutura de tabela que pode ter esta aparência:

 USER
 userId
 firstName
 lastName
 username
 password
 lockedOut

E se você queria bloquear um usuário? Qual o código que você chamaria da camada de apresentação? Você instanciar a classe UserEntity, e fazer:

 User = new UserEntity(userId)
 User.lockedOut = true
 User.Save()

Ou será que você criar uma nova classe, como UserHelper (/BusinessLogic/UserHelper.cs), que pode ter uma função LockOutUser. Isso mudaria o código a ser:

 UH = new UserHelper()
 UH.LockOutUser(userId)

Ou você poderia estender a classe UserEntity base, e criar UserEntityExt que adiciona a nova funcionalidade? Portanto, o código da camada de apresentação pode parecer:

 User = new UserEntityExt(userId)
 User.LockOutUser()

Ou ... você faria algo completamente diferente?

E o que seria o seu diretório / estrutura namespace e nomeação de arquivo / classe convenções ser?

Foi útil?

Solução

Eu acho que o que você está procurando é uma camada de serviço que se sentar em cima dos objetos de domínio. Você tem basicamente isso com sua segunda opção, embora eu poderia chamá-lo UserService ou UserTasks. Ao encapsular esse processo LOCKUSER em um único lugar será fácil mudar mais tarde, quando pode haver mais etapas ou outro domínio objetos envolvidos. Além disso, este seria o lugar para implementar transações ao lidar com várias chamadas de banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top