Diferenças entre NHibernate, Castelo, Linq - Quem são eles que visam?
-
01-07-2019 - |
Pergunta
Esta resposta diz que Linq é dirigido a um grupo um pouco diferente de desenvolvedores que NHibernate, Castelo, etc.
Sendo bastante novo para C #, esquece todas as coisas DB torno dela:
- Existem outros grandes, por falta de um termo melhor, wrappers SQL que NHibernate, Castelo, Linq?
- Quais são as diferenças entre eles?
- Que tipo de desenvolvedores ou desenvolvimento são eles que visa?
-Adam
Solução
Quando você diz Castelo Eu suponho que você quer dizer Castelo Active Record?
A diferença é NHibernate é um OR / M e é voltado para desenvolvedores que querem focar o domínio em vez do banco de dados. Com LINQ to SQL, seu banco de dados é pré-existente e você está relacionamentos e alguns de programação será conduzido pela forma como seu banco de dados está definida.
Agora entre NHibernate e Castle ActiveRecord - eles são semelhantes em que você está dirigindo o design do aplicativo a partir do domínio, mas com NHibernate você fornecer arquivos xml de mapeamento (ou classes de mapeamento com NHibernate fluente), onde no Active Record você estiver usando o convenção sobre configuração (usando atributos para definir as colunas e configurações que não se ajustam naturalmente). Castelo registro ativo ainda está usando NHibernate em segundo plano.
Um OR / M não é necessariamente o 'único caminho verdadeiro' para ir. Depende do seu ambiente, a aplicação seu desenvolvimento e sua equipe.
Você também pode querer verificar para fora SubSonic . É ótimo para registro ativo, mas não é para o projeto onde você quer concentrar-se principalmente em seu domínio. Dependendo do projeto, eu costumo usar NHibernate (com Castelo Active Record) ou Subsonic
Outras dicas
LINQ é apenas um conjunto de novos recursos C #: métodos de extensão, expressões lambda, inicializadores de objeto, tipos anônimos, etc
."LINQ to SQL", por outro lado é algo que você pode comparar outras embalagens SQL.
Na verdade, usamos tanto Linq e NHibernate juntos (com Fluente). Se você tiver um pouco de paciência com a curva de aprendizagem, então você vai cair rapidamente no amor.
NHibernate e LINQ to SQL são objeto / relacional Mappers projetado para facilitar a lidar com a incompatibilidade de impedância encontrada entre os objetos e RDBMS. Se você onde quer alcançar, uma aplicação ignorante persistente testável, NHibernate é o caminho a percorrer. Eu sempre recomendo NHibernate sobre LINQ to SQL. Ambas as ferramentas são destinadas a remoção de negociação com acesso a dados. Quantas vezes você realmente precisa de código de acesso de dados de escrita?
Castle é uma estrutura de aplicativo e inversão de controle recipiente e não fornece acesso a dados. Ela fornece instalações para usar NHibernate, para fazer menos atrito, e também fornece uma implemenation do padrão Actuve Gravar usando NHibernate.