| Autor |
Mensagem |
|
|
Essa definição vem do livro do Ben Pierce, que eu linkei em um post anterior (Pg 1-2). O que ele diz é que sistemas de tipos são um método para verificar termos (ou "syntactic phrases"). Como sua linguagem implementa estes termos em sua sintaxe é completamente irrelevante. Notei que bastante gente se empolgou com o tema. Antes de ler Pierce, entretanto, provavelmente é melhor começar com: http://www.amazon.com/gp/product/0262011530?ie=UTF8&tag=fragmental-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0262011530 ou http://www.amazon.com/gp/product/0123745144?ie=UTF8&tag=fragmental-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0123745144
|
 |
|
|
GHSilva wrote:Caro amigo rcalcado,
É até estranho debater este assunto dessa forma pois parece que estou falando de laranjas e você de bananas.. rs
São arbitrários porque não fazem sentido dentro do sistema de tipos, eles "quebram as regras", trapaceiam.
Quanto as chamadas "trapaças" acredito que seja um infeliz comentário pouco embasado não somente no texto PDF que você mandou o qual na página 4, cita a linguagem C como também fracamente tipada entretanto não impediu que fosse largamente utilizada até mesmo para desenvolver SO´s até hoje, nao é mesmo?
Logo...? O que ser fracamente tipada ou não tem a ver com ser amplamente utilizada, ser útil ou qualquer outra coisa?
A situação é simples: PHP é fracamente tipada. Pode ser uma linguagem fantástica para desenvolvimento web mas isso não tem nada a ver com tipagem. E esse foi exatamente o meu ponto no post anterior.
GHSilva wrote:
Conforme havia dito antes bons programadores aprendem a utilizar a linguagem e não adequam a sintaxe ao seu uso.
A propósito, tipagem não é sintaxe.
|
 |
|
|
GHSilva wrote:
E não os casts não são arbitrários
São arbitrários porque não fazem sentido dentro do sistema de tipos, eles "quebram as regras", trapaceiam. Isso faz a tipagem ser fraca, você não consegue provar baseado apenas nas regras do sistema de tipos que um programa é válido, seja em runtime ou compilação. É um tema relativamente abstrato e não invalida a utilidade de PHP, Perl ou outra linguagem fracamente tipada, entretanto.
Para entender melhor eu recomendo a leitura deste paper (que, apesar do tema cabuloso, é bem tranquilo de ler):
http://lucacardelli.name/Papers/TypeSystems.pdf
E deste livro (mais complicado):
http://www.amazon.com/gp/product/0262162091?ie=UTF8&tag=fragmental-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0262162091
Além da apresentação que linkei antes.
[]s
|
 |
|
|
GHSilva wrote:
...
POG que é POG nao precisa usar o PHP pra fazer cagada.. Faz em qualquer uma! Assim como o bom programador faz um codigo seguro usando as particularidades do PHP, sem problema algum.
Desculpe se ofendi alguém, não foi intencional.. Só não fiquem bitolados em uma única vertente.. mente aberta!.. rs
Sua explicação faz sentido mas não invalida argumentos anteriores. O fato de fazer casts arbitrários faz de PHP uma linguagem fracamente tipada. Uma apresentação que pode ajudar:
http://www.slideshare.net/pcalcado/one-or-two-things-you-may-not-know-about-typesystems
[]s
|
 |
|
|
É bom ler a bibliografia básica antes de se aventurar. Este tipo de dúvida está bem explicado no material de referência. O GUJ também está cheio de threads sobre isso.
Outras coisas que podem ajudar:
http://blog.fragmental.com.br/2007/06/07/ddd-e-dto/
http://www.slideshare.net/pcalcado/domaindriven-design
|
 |
|
|
|
De fato, é muito difícil conseguir comprar algo utilizando um cartão internacional, seja lá qual for o país emissor, no Brasil. Sempre que estou no país eu tenho este problema.
|
 |
|
|
Oi, Scopel,
Você está tentando rodar o exemplo com uma cópia recente do Spring Framework, certo? Bom, essa apostila é de 2006, o Spring ainda estava na versão 1 (na verdade, a versão 2 foi lançada durante uma das turmas deste curso...) e hoje em dia temos o Spring 3! Eu nunca main tentei rodar os exemplos mas imagino que dificilmente seriam compatíveis...
Obrigado pelo up no tópico, entretanto. Desde 2006 que eu perdi esta apostila e finalment consegui uma cópia. Se conseguir algum tempo vou ver se a atualizo, parece que ela ajudou muita gente...
|
 |
|
|
Oi,
carol_programadora wrote:
Se nas minhas classes de controller, quando eu preciso de alguma consulta direta, sem ter negócio envolvido, inclua aqui dados brutos para popular comboBox, DataTable... etc eu tinha pensando em injetar uma dependência "UsuarioDao" no meu "UsuarioController" e não um UsuarioRepository... achei que fosse errado colocar uma dependência do repository no controller, achei que elas deveriam ser usada APENAS por classes do domínio, por domínio quero dizer as entities e os services, então eu pensei que o controller não deveria ter esse contato.
Então creio que estou errada, utilizando sua sugestão Shoes, minha única opção pra inserir dentro do "UsuarioController" seria minha "UsuarioRepository.
Uhm... será que você não está pensando em dados quando devia estar pensando em objetos?
Uma combobox ou algo do tipo não exibe dados isolados, ela exibe propriedades de um objeto. Quando você precisa, digamos, listar todos os estados de um país você não deveria fazer algo como:
Desta forma você está quebrando o encapsulamento do objeto país *e* quebrando oencapsulamento da sua infra-estrutura de persistência.
Eu recomendo fazer assim:
carol_programadora wrote:
Dentro de Application e Domain, tem pacote "service", pelo que li e entendi até agora(a não ser que fiz bagunça) minhas regras de negócio devem ficar no Domain > Service, certo?!
Sim.
carol_programadora wrote:
Fiquei confusa com essa camada "Application", não tinha visto sobre ela no DDD, e na verdade pouco conheço ainda dela no geral
Como o Alexa falou, no Capítulo 4 do Domain-Driven Design existe a definição das Camadas propostas pelo Eric Evans:
DDD, Capítulo IV wrote:
* User Interface (or Presentation Layer): Responsible for showing information to the user and interpreting the user's commands. The external actor might sometimes be another computer system rather than a human user.
* Application Layer: Defines the jobs the software is supposed to do and directs the expressive domain objects to work out problems. The tasks this layer is responsible for are meaningful to the business or necessary for interaction with the application layers of other systems. This layer is kept thin. It does not contain business rules or knowledge, but only coordinates tasks and delegates work to collaborations of domain objects in the next layer down. It does not have state reflecting the business situation, but it can have state that reflects the progress of a task for the user or the program.
* Domain Layer (or Model Layer): Responsible for representing concepts of the business, information about the business situation, and business rules. State that reflects the business situation is controlled and used here, even though the technical details of storing it are delegated to the infrastructure. This layer is the heart of business software.
* Infrastructure Layer: Provides generic technical capabilities that support the higher layers: message sending for the application, persistence for the domain, drawing widgets for the UI, and so on. The infrastructure layer may also support the pattern of interactions between the four layers through an architectural framework.
Os slides do meu workshop de DDD podem ajudar: http://www.slideshare.net/pcalcado/domaindriven-design
|
 |
|
|
carol_programadora wrote:
Nos no meu "UserRepository" eu tenho algo mais relacionado ao negócio, suponhamos que eu precise de encontrar "Todos usuários com salário > 5.000, que tenham Casa própria quitada, que não tenha filhos, seja solteiro etc etc"(considere que seja uma consulta bem complexa) e lá na interface repository eu terei este método "findUsersBemDeVida();
Até ai ok, pois representa algo bem espefíco, mas agora se eu estiver usando este modelo:
UsuarioRepository > UsuarioDecorator(implements UsuarioRepository) > UsuarioDao
Não entendi, por que você está usando essa hierarquia toda? Que tal uma interface RepositorioUsuarios que é implementada por um UsuárioDAO, uma coisa simples que funciona?
carol_programadora wrote:
Onde ficará meu SQL(HQL seja o que for) dessa consulta?
Na implementação do Repositório, o DAO na minha proposta acima.
|
 |
|
|
Obrigado a todos que foram.
Estou fechando o segundo dia do workshop de DDD na Caelum RJ neste instante e já pensando o que poderia ser interessante pra fazermos ano que vem. Sugestões?
|
 |
|
|
Dois anos de Foster e vocês acham que eu vou perder a chance de ir pro bar no Rio?
Sábado ainda é dia de Lapa? Dá pra dar uma esticada depois...
|
 |
|
|
cv wrote:
pedromuyala wrote:MVC está presente na Camada de Apresentação.
Er, nao. O 'V' de MVC *é* a camada de apresentacao.
Nope, MVC != Camadas
http://www.fragmental.com.br/wiki/index.php/MVC_e_Camadas
|
 |
|
|
ravisantos wrote:
Philip, muitos questionam o uso do Repository com o Dao ou seja o Repositorio sendo um interface para o Dao. Dizem que o dao neste caso nao faz sentido bastando ter por composicao dentro do repositorio, uma Session ou EntityManager.
O que você pensa desta abordagem?
Desde que não haja dependência nenhuma da as classes da Camada de Negócio para Hibernate/JPA/etc. Não há qualquer problema. O que geralmente eu tenho hoje em dia é um UsuarioRepositorio como interface que é implementado por um HibernateUsuarioRepositorio. O primeiro é da Camada de Negócios e o último da Persistência.
|
 |
|
|
ravisantos wrote:Olá, Philip e qual bibliografia seria recomendada?
Oi,
Por mim, esta: http://blog.fragmental.com.br/2008/05/20/trilha-de-livros-desenvolvedor/
|
 |
|
|
thimor wrote:aplicando essa filozifia como ficaria entao um programa web usando mvc?
Oi,
Antes de continuar alguma leitura recomendada:
http://fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs
http://fragmental.com.br/wiki/index.php/MVC_e_Camadas
http://fragmental.com.br/wiki/index.php/Fantoches
http://fragmental.com.br/wiki/index.php/Arquitetura_de_Camadas_em_Java_EE
E se você procurar no GUJ por "Camada de Negócios" vai encontrar algumas centenas de tópicos.
|
 |
|
|