Gladh skrev:
compusa skrev:
Är det detta du är skeptiskt till?
Både ja och nej. Det är bra att det inte är ditt objekt i sig själv som sköter updateringen utan du har lagt ut det i någon annanstans, att du sedan wrappar det i ditt objekt är väl okej, även om jag inte tycker det behövs eller är snyggt.
Var i applikationen ser du helst att man har logiken för att skapa/ändra/ta bort/mm objekten? Jag hade den som sagt från början i mina Command objekt som min Front Controller mappar till vid klient-förfrågningar. Det fungerade väl bra men kändes inte helt optimalt, i alla fall inte med J2EE-tekniken.
Gladh skrev:
Det är inte bra att du har specifika funktioner för att skapa och spara varje objekt.
dao.getCustomerDAO();border vara:
dao.GetAnyObjectDAO();På detta sätt får du mindre (men mer komplex) kod. Nu är det egentligen inget problem då de flesta av dessa DAOFactorys oftas genererars från något program, men om man vill gå in och ändra något generellt för alla klasser så måste man gå in i alla GetObjectDAO() metoder och ändra i dessa istället för att bara ändra i GetAnyObjectDAO().
Min DAO är ganska strikt uppbyggd efter specifikationerna i J2EE-pattern catalog. Egentligen har jag ett interface för varje typ, dvs CustomerDAO är ett interface, och MysqlCustomerDAO skulle kunna vara en klass som implementerar detta interface. Min DAOFactory är abstrakt, men när jag anropar med dao.getCustomerDAO så görs detta mot en konktret factory, dvs något i den här stilen:
public class MysqlDAOFactory extends DAOFactory {
public CustomerDAO getCustomerDAO() {
// MysqlCustomerDAO implements CustomerDAO
return new MysqlCustomerDAO();
}
Hur ska jag kunna komma förbi detta? Varje DAO såsom CustomerDAO har ju singa egna operationer mot databasen, samt att implementationerna kan skilja sig åt mellan olika DBMS. Att ha en generell klass får jag inte riktigt ihop... Är det möjligtvis en OR-mapper du syftar på?
Gladh skrev:
lilly skrev:
För manager är väl samma sak som CustomerRepository i ovanstående länk?
Japp och och Patrik pratar om samma sak, med olika namn bara, och det är näste samma sak som Compusa pratar om, Compusa har dock spcifika Factory-klasser för varje typ av objekt som skall skapas, jag och Partik pratar om en generell factoryklass.
Tror det framkom ovan, men jag använder inte en konkret factory för varje objekt som skapas. En konktert factory för varje DBMS om så krävs. En DAO av typen CustomerDAO är en vanlig klass som implementera metoderna för att läsa/ändra data i olika varianter av DBMS.
Alltså:
DAOFactory -> kan skapa olika typer av konkreta "DBMS"-factories, OracleFactory, MysqlFactory, eller kanske en JdbcFactory etc...
Oracle, MysqlFactory -> kan skapa alla typer av DAO:s som implementerar CustomerDAO, OrderDAO och således hantera alla value-objekt såsom Customer och Order etc.
Men det framkom nog tidigare i mitt inlägg ;)
/Edit
Kanske något i denna stilen: http://www.java2s.com/Code/Java/Hibernate/GenericDaoCreate.htm