Parece un poco doloroso tener mis clases de Moose. Luego, use DBIx::Class para obtener un conjunto de resultados ... y luego asigne manualmente mi conjunto de resultados a las clases de alces.¿Existe alguna manera fácil de asignar los resultados de DBIx :: Class a mis clases de Moose personalizadas?
Respuesta
Puede usar Moose con DBIC sin problemas. De hecho, me gusta utilizar MooseX :: Declarar ya que encuentro la sintaxis extendida es muy útil en el diseño de API públicas sólidas, por ejemplo:
use MooseX::Declare;
class MyApp::Schema::Result::Geo::Division
extends MyApp::Schema::Result {
use Locale::Geocode::Division;
__PACKAGE__->table('division');
__PACKAGE__->add_columns(
fk_territory_id => {
data_type => 'char',
size => '36',
},
division_id => {
data_type => 'char',
size => '36',
},
code => {
data_type => 'varchar',
size => '5',
},
created => {
data_type => 'datetime',
set_on_create => 1,
},
);
__PACKAGE__->set_primary_key('fk_territory_id','division_id');
__PACKAGE__->uuid_columns('division_id');
__PACKAGE__->add_unique_constraint(['fk_territory_id','code']);
__PACKAGE__->belongs_to(
territory => 'MyApp::Schema::Result::Geo::Territory',
{'foreign.territory_id' => 'self.fk_territory_id'},
);
method as_geocode_division {
Locale::Geocode::Division->new($self->code);
}
__PACKAGE__->meta->make_immutable(inline_constructor => 0);
} 1;
Parece que usted está describiendo exactamente lo que escribí recientemente con el fin de mapear los alces los valores de atributo en Rose::DB::Object valores (con el objeto db y el administrador de objetos contenidos en los atributos privados) y viceversa. Originalmente usé activadores alrededor de cada atributo de Moose para escribir en el objeto Rose de inmediato, pero más tarde abandoné ese enfoque y escribí los valores perezosos solo cuando fue necesario (es decir, en el momento de una operación ->save()
). Lo implementé usando algunos roles y una clase de azúcar que instaló automáticamente un rasgo de atributo que indica "Soy un campo de tabla" para los atributos relevantes.
Pero no hagas lo que hice, solo usa DBIx::Class directamente. La siguiente versión principal está siendo reescrita en Moose de todos modos, así lo escucho.
* La siguiente versión principal está siendo reescrita en Moose de todos modos, por lo que oigo. * Que ha estado dando vueltas durante años. –
Matt tuvo una charla ingeniosa sobre ello en Perl Oasis el mes pasado. – perigrin
Si tiene que mapear entre las clases de Moose y un esquema de DBIC, le recomendamos que consulte un almacén de objetos persistentes como KiokuDB.
Pierdes algunas de las funciones de una Base de Datos Relacional, especialmente si tienes un esquema existente pero obtienes muchas características, la principal es la asignación silenciosa entre el data-store y tu modelo de Objetos. El back-end de DBI para KiokuDB es probablemente el mejor ejemplo de esta compensación. La base de datos está altamente des-normalizada, pero eso se debe a que está funcionando tan efectivamente como un almacén de claves.
KiokuDB, sin embargo, puede funcionar con motores de almacenamiento optimizados para este tipo de datos. Es compatible con varias de las celebridades actuales de "NoSQL", incluidas CouchDB y MongoDB. También es compatible con BerkelyDB, el favorito de los antiguos seguidores.
Kioku no es la respuesta para cada problema, pero se usa con bastante éxito para Parking Mobility para manejar todo el almacenamiento de datos sin problemas.
+1 por convencerme de la mención de KiokuDB. –
- 1. ¿Cómo puedo imprimir bastante los resultados de DBIx :: Class?
- 2. DBIx :: Class do unions?
- 3. ¿Existe alguna manera fácil de usar InternalsVisibleToAttribute?
- 4. De alguna manera, registrar mis clases en una lista
- 5. ¿Existe alguna manera fácil de convertir clases de C# a PHP?
- 6. ¿Manera fácil de anular los métodos predeterminados en clases personalizadas de Python?
- 7. ¿Todas mis clases de Moose deben contener 'namespace :: autoclean' y 'make_immutable' o hay alguna forma de obtenerlas de manera predeterminada?
- 8. ¿Existe alguna manera simple de probar si un atributo de Moose es de solo lectura?
- 9. ¿Existe alguna manera fácil de integrar scaladoc en IntelliJ Idea?
- 10. ¿Existe alguna manera fácil de aleatorizar una lista en VB.NET?
- 11. ¿Existe alguna manera fácil de respaldar los fragmentos de usuario de Oracle SQL Developer?
- 12. ¿Cómo debo almacenar mis clases personalizadas?
- 13. ¿Existe alguna manera fácil de calcular y formatear los intervalos de hora/fecha en Java?
- 14. ¿Existe alguna manera clara de asignar la clase de un tipo genérico a una variable?
- 15. ¿Existe alguna manera fácil de excluir archivos para los que FuzzyFinder busca?
- 16. Moose: ¿Caducan los resultados en caché de los cálculos cuando cambian los valores de los atributos?
- 17. ¿Hay alguna manera fácil de convertir Criteria a HQL?
- 18. DBIx :: Class tiene un caché transparente?
- 19. ¿Existe alguna manera fácil de convertir el código jquery a javascript?
- 20. Rails3 visitas de Arel a clases personalizadas
- 21. ¿Existe alguna manera fácil de "desactivar el registro" antes de liberar su aplicación en el mercado?
- 22. ¿Existe alguna manera fácil de cambiar el comportamiento de un control Java/Swing cuando se enfoca?
- 23. ¿Se puede usar DBIx :: Class para crear tablas?
- 24. ¿Existe alguna manera inteligente de pasar la clave a default_factory?
- 25. ¿Existe alguna manera fácil de autocompletar las variables de bloque en xcode?
- 26. Automatice pimpl'ing de las clases de C++, ¿hay alguna manera fácil?
- 27. ¿Existe alguna manera más fácil de firmar un documento XML en Java?
- 28. Cómo indicar el marco zend donde están mis clases personalizadas
- 29. ¿Es esta una manera válida de simplificar mis clases heredadas?
- 30. ¿Cómo puedo ordenar la salida de DBIx :: Class :: Schema :: Loader?
¿Por qué correlaciona los resultados con las clases de Moose? ¿Por qué no usar las clases DBIx :: Class directamente? – friedo