Subsonic Vs NHibernate

votos
72

Qual é o consenso sobre quando usar uma dessas ferramentas adversed para o outro? Acho Subsonic muito útil em termos de fazer as coisas rapidamente, mas em grandes projetos tende a não escalar, e seus laços seu modelo de domínio para o seu modelo de banco de dados. É aí que Nhibernate vem em que lhe dá POCOs leves que não estão relacionados com o seu modelo de banco de dados, mas o tempo de configuração é muito maior.

Publicado 04/08/2008 em 17:29
fonte usuário
Em outras línguas...                            


15 respostas

votos
83

Recebo esta pergunta muito e realmente se trata de quanto você quer mexer. Eu não posso dizer-lhe quão prejudicial comentários de Chris Cyvas RE escala SubSonic ter sido - e eu tenho vindo a responder a estes desde :(.

O negócio é - perf-wise, SubSonic escalas muito bem. Em termos de crescimento do projeto - qualquer ferramenta que você usa vai exigir sua atenção. Mesmo NHibernate.

Eu escrevi um post sobre como usar o padrão de repositório com DI (como você faria com NHIb ou qualquer ferramenta para que o assunto) com SubSonic 2.1:

http://blog.wekeroad.com/blog/subsonic-writing-decoupled-testable-code-with-subsonic-2-1/

Eu também escrevi um post sobre o desempenho de SUBSONIC:

http://blog.wekeroad.com/blog/subsonic-scaling/

Espero que isto ajude.

Respondeu 12/09/2008 em 22:54
fonte usuário

votos
45

Eu recomendo SubSonic se o projeto trabalha com a visão ActiveRecord que o banco de dados é o seu modelo. Você vai ter uma aula por mesa e tudo num passe de mágica funciona. Pode, claro, ajustar e substituir as coisas, mas se você (ou seu projeto) discordam fundamentalmente com a abordagem de classe-per-mesa, eu olhar para NHibernate, uma vez que se inicia com a abordagem mais complexa (mas mais flexível) de mapear o seu modelo de domínio para o seu banco de dados.

Se você estiver usando um banco de dados relativamente simples que está sob seu controle (como em, você pode alterar colunas sem enviar oito formulários para um conselho de revisão de supervisão divisão de banco de dados), eu recomendo começando com SubSonic e se mudar para NHibernate se SubSonic não atender às suas necessidades.

Respondeu 06/08/2008 em 22:47
fonte usuário

votos
31

Para que o seu valor ... Eu tive a oportunidade de usar as duas tecnologias bastante um pouco mais desde que esta pergunta. E eu tenho que ficar que se estas tecnologias você escolhe assuntos muito pouco. Claro NHibernate permite que seus entidades empresariais para ser ligeiramente menos acoplado a sua estrutura de banco de dados, mas eu continuo a achar que há muitas ocasiões em que você ainda tem que dobrar a vontade do banco de dados.

Na minha opinião a única verdadeira maneira para separar totalmente o seu modelo de domínio do seu modelo de banco de dados é escrever seu próprio DTOS (essencialmente POCOs para passar dados ao redor), e, em seguida, mapeá-los de volta ao seu ORM de escolha em sua camada de dados. Mas na maioria dos casos, esta abordagem irá me mais problemas do que seu valor.

Respondeu 05/03/2009 em 10:23
fonte usuário

votos
13

Ligeiramente off topic, mas em uma veia similar. Você já olhou para Castle ActiveRecord está escrito em cima do NHibernate e remove a necessidade de gastar tempo criando mapeamentos XML de código para o banco de dados. Como NHibernate você pode estruturar seus objetos de domínio como você quer e depois gerar um esquema de banco de dados a partir desta estrutura.

Usando ActiveWriter , uma ferramenta contribuiu, você pode facilmente mapear a partir de seu banco de dados para objetos de domínio.

Respondeu 05/08/2008 em 06:07
fonte usuário

votos
9

Você pode considerar a olhar para Fluente NHibernate; que torna o gerenciamento NHibernate uma brisa. Não sei como seria difícil fazer a transição um esquema existente, mas se você está construindo uma nova aplicação é bom para definir o modelo de domínio e gerar o banco de dados em praticamente qualquer servidor DB que você pode pensar. Ler a outros comentários aqui, eu acho que Fluent NHibernate traz NHibernate a par com SubSonic para facilitar a configuração.

Respondeu 04/03/2009 em 21:17
fonte usuário

votos
7

Eu escrevi um post recentemente sobre ORMs .NET que tem Subsonic nele, e ActiveRecord. Da minha experiência, depende do que o projeto está fazendo, Subsonic funciona muito melhor se você vem de um fundo SQL mas NHibernate tem mais ontop dele. ActiveRecord é bom para projetos menores, não estou convencido de que é mais rápido para projetos maiores do que furar a NHibernate.

Respondeu 07/10/2008 em 11:10
fonte usuário

votos
7

Eu não posso dar uma boa comparação como eu ainda não realmente utilizados NHibernate em um projeto, mas eu tenho usado SubSonic e têm sido muito feliz com isso. Até agora, eu não ter atingido qualquer um dos principais obstáculos ao usá-lo.

Confira este post de Rob Conery, um dos criadores do SubSonic. Ele fala sobre como separar o seu código SubSonic do resto do aplicativo. Ele sequer menciona o fato de que esta arquitetura permitirá que você trocar mais tarde para fora SubSonic por alguma outra camada de acesso a dados, como NHibernate ou LINQ to SQL.

Eu sei que eu realmente não responder à sua pergunta, mas eu espero que isso ainda ajuda.

Respondeu 04/09/2008 em 20:25
fonte usuário

votos
5

I têm avaliado tanto e eu acredito que não seria justo para recomendar um sobre o outro sem compreender quais são seus objetivos. Em sua pergunta você indicou as diferenças bem e acredito que deve ser o seu factor decisivo. Pessoalmente, tenho usado tanto e vai continuar a usar os dois, dependendo do projeto.

  • NHibernate é a minha escolha para projetos de maior escala porque seus usos de Poço de leve. Se eu fosse para sempre mudar a minha ORM "Eu acredito" isso seria muito mais fácil refatorar.
  • SubSonic é a minha escolha quando eu tenho um projeto de escala menor. Eu acredito que o desempenho sábio SubSonic escamas bem. No entanto, sinto-me intimamente ligado com ele porque ele é tão gravado no meu projeto. No projeto menor ainda posso ligá-lo fora, porque a base de código é tão pequeno e ele realmente me ajuda a arrancar código como anunciado.
Respondeu 26/01/2009 em 14:37
fonte usuário

votos
4

Novamente um pouco off-topic, mas eu vou segunda Castle ActiveRecord - em vez de usar o banco de dados como o modelo (abordagem Subsonic) ou passar horas em spaghetti XML (abordagem NHibernate) você simplesmente atributos lugar em suas classes de modelo.

Você pode até obter ActiveRecord para gerar o esquema de banco de dados para você.

Nós temos usado essa abordagem em alguns projectos agora e os benefícios são os seguintes:

  • caminho de atualização fácil de NHibernate, se necessário no futuro
  • Suporte para modelos de herança simples - por exemplo. Carro -> Veículo
  • O esquema que gera é provavelmente como você teria criado lo de qualquer maneira, para que possa passar mais tempo construindo o aplicativo, em vez de se preocupar sobre como manter o seu modelo / db em sincronia.
Respondeu 16/09/2008 em 13:15
fonte usuário

votos
4

Eu acho que você praticamente acertou em cheio. Subsonic gera código, para que seus objetos de negócios será o reflexo de sua estrutura de banco de dados. nHibernate usa arquivos de mapeamento que mapeiam seus objetos de negócios para o banco de dados para que os objetos podem ser estruturados como quiser.

Como grande de um projeto é esse? Haverá apoio a longo prazo necessário? É o custo-benefício de Subsonic indo para compensar possíveis problemas de escala?

Respondeu 04/08/2008 em 18:12
fonte usuário

votos
3

Considere sua equipe e tamanho do projeto ao considerar ActiveRecord.

Na minha experiência, ActiveRecord é uma abstração em cima do NHibernate que começa a vazar como uma peneira ao tentar cenários mais complicados.

Se você tem um esquema de moderada a fortemente complicado ou não-simples, vara com NHibernate. Você pode cortar e cortar-lo para perto da perfeição.

O outro lugar que você pode entrar em apuros é quando você precisa de uma consulta moderadamente complicado. ActiveRecord esconde um monte de implementação do NHibernate ... mas você vai precisar dele para uma consulta complicado, que vai ser muito difícil se você está completamente familiarizado com HQL. Seja membros da equipe cuidadosos não apenas cortar fora nas bordas em vez de aprender NHibernate e HQL.

Respondeu 02/10/2008 em 20:26
fonte usuário

votos
3

Nós bootstrapped com subsônico e agora estão tentando avaliar se vamos mudar para nhibernate agora que estamos nos pontos de dor de subsônico.

Nossa outra opção é criar um meio-termo onde usamos subsônico para consultar e carregar objetos arbitrários com o seu "executar como lista digitado" funcionalidade que faz um mapeamento com base nome fora de uma instrução SQL estilo linq arbitrária. Ou tentar recriar algumas delas em nhibernate e refatorar o resto.

Então eu digo subsônico faz sentido em pequenas aplicações, mas a manutenção em aplicações subsônicas fica bastante peludo, temos momentos especialmente difíceis com o código de validação sobreposição e pré / pós em código acionado eventos. Para um Active Record, subsônico é definitivamente 80% lá, mas faz algumas coisas de um modo esquisito, e pára-lo de ter qualquer controle real sobre a sua hierarquia de herança, uma vez que cada classe deve herdar uma tabela para voltar a essa tabela.

Respondeu 30/08/2008 em 07:18
fonte usuário

votos
2

Eu acredito que você deve ater a um que você pode utilizar o melhor. O objetivo final é o código de qualidade produtividade e bom desempenho. Se você sabe SubSonic dentro e para fora, em seguida, cumpri-lo e se você sabe NHibernate na vara profundidade para NHibernate. Esta é a pergunta muito subjetivo. Você também deve considerar o fato de que o que sua equipe-membro estão tendo experiência com. Se você é bom no que você vai ser capaz de mantê-lo facilmente.

Eu vi grandes projetos usando SubSonic enquanto NHibernate já é famoso e amplamente utilizado.

A decisão de escolher ORM não depender exclusivamente do próprio ORM.

Respondeu 03/11/2009 em 06:52
fonte usuário

votos
2

Abrace a diferença de impedância!

Veja isso

:)

Ou não. Se você quiser desempenho, fazê-lo sozinho. Se você quer que ele rápido e fácil, ir com NHibernate e ActiveRecord. Se você gosta de fingir que você realmente sabe o que está acontecendo no nível de acesso de dados, usar NHibernate e sentar-se com XML durante todo o dia para obter um muitos para muitos vai ... Ou apenas ... err .. fazê-lo sozinho - ADO.Net FTW!

Respondeu 08/02/2009 em 02:51
fonte usuário

votos
0

O conselho que eu comecei sobre o tema é que Subsonic não escala para lidar com cenários mais complexos e por isso, se você ir por esse caminho você vai acabar com um trabalho tentando trocar mais a um ORM mais avançado.

Estou, portanto, mais interessado em usar NHibernate para casos complexos, Castelo Active Record para casos mais simples e estou mantendo um olho em Fluent NHibernate que deve fazer NHibernate mapeamento muito mais fácil (especialmente uma vez que o suporte de mapeamento baseado convenção é melhorada).

Respondeu 25/10/2008 em 15:20
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more