2010-06-12 4 views
9

Esto es más de un tipo de casos de uso de la pregunta ... pero también lo suficientemente genéricos para ser más ampliamente aplicable:Perl OO marcos y programa de diseño - Alce y de adentro hacia afuera objetos de Conway (Clase :: Std)

En resumen, estoy trabajando en un módulo que es más o menos un contenedor de línea de comandos; OO, naturalmente. Sin entrar en demasiados detalles (a menos que alguien los quiera), no hay una gran cantidad de complejidad en el sistema, pero sí es natural tener tres o cuatro objetos en este marco. Finalmente, es algo de código abierto que pondré allí, en lugar de un módulo con algunos desarrolladores en la misma empresa trabajando en ello.

Primero implementé el OO usando Class :: Std, porque Perl Best Practices (Conway, 2005) formuló un buen argumento sobre por qué usar objetos de adentro hacia afuera. Control total sobre a qué atributos se accede, etc., encapsulado adecuado, etc. Además, su diseño es sorprendentemente simple e inteligente.

Me gustó, pero luego noté que nadie realmente usa esto; de hecho, parece que el propio Conway en realidad ya no recomienda esto.

Así que pasé a ser el favorito de todos, Moose. Es fácil de usar, aunque de manera exagerada, por lo que respecta a las características de lo que quiero hacer. La gran desventaja es que tiene una gran cantidad de dependencias de módulos que obligan a los usuarios de mi módulo a descargarlas todas. Un inconveniente menor es que tiene mucho más funcionalidad de la que realmente necesito.

¿Qué son recomendaciones? ¿Inconveniente a los desarrolladores compañeros al forzarlos a usar un módulo posiblemente obsoleto, o forzar a cada usuario del módulo a descargar Moose y todas sus dependencias?

¿Existe una tercera opción para un marco de Perl OO adecuado que sea popular pero ninguno de estos dos?

+3

¿Definir "giro"? Moose tiene 4 dependencias que no están en Class :: Std, de las cuales la más grande es Class :: MOP, que es el objetivo de Moose. – perigrin

+0

Olvidaste las dependencias de las dependencias. :-) – Emmel

+4

Un giro -> http://deps.cpantesters.org/?module=Moose;perl=latest Descontar todos los módulos principales, 16 no es tan malo, pero no es 4. – Schwern

Respuesta

4

Bueno, está Mouse, que es como Moose pero sin todas las dependencias (y algunas de las características). También se inicia un poco más rápido. No lo he probado yo mismo, pero generalmente es well thought of.

+2

Moose es maravilloso. Usa Moose en lugar de Mouse. # línea 1 en "Descripción" –

+1

Sí, use Moose para desarrollar su aplicación, pero use Mouse cuando la implemente, especialmente porque es una aplicación de línea de comandos, algo que se beneficiaría de las mejoras de rendimiento de Mouse. Mira a Cualquiera :: Alce. – MkV

+4

No, no hagas eso. Nunca use Any :: Moose. – jrockway

5

Para ser perfectamente justo, viendo prácticamente todo lo interesante estos días en el mundo Perl tiene a Moose en algún lugar como una dependencia, no veo que sea una gran deuda para otros "desarrolladores compañeros de Perl".

¡Lo más probable es que ya lo tengan instalado mientras hablamos!

Editar: Algunas estadísticas:

Moose está actualmente clasificado en el lugar número 65 en la "mayoría dependía de la" lista de módulos, Aliases top 100, con más de 1.637 paquetes que dependen de ella. Eso es casi tanto como cosas como Time::HiRes, y más de DBI, y no creo que sea tan probable que preguntes dependiendo de esos si?

+0

El módulo que se está escribiendo no está dirigido a desarrolladores de núcleo duro, sino a administradores de sistemas y similares. Es un tipo de envoltura/sistema de automatización de línea de comandos. Si algo es Moose es quizás favorable para los desarrolladores, pero un PITA para las personas que tienen que instalar sus dependencias. – Emmel

+1

El mouse, Moose menos las astas, tiene dependencias * muy * livianas y, opcionalmente, se compila desde XS. – MkV

+0

Además, la lista de Alias ​​tiene un poco de alce pesado debido a la adición de las dependencias de DBIx-Class (opcional) en los módulos Moose * que se agregan al META.yml para ese proyecto. – MkV

5

El "marco Perl OO moderno" aceptado actualmente es Moose. Diría que los usuarios lo descarguen, o puede agruparlo con sus módulos en la instalación usando PAR::Packer.

Citando "But I can't use CPAN" (... porque mis usuarios no tendrán que instalar cosas):

Suponiendo que sólo está manejando sus usuarios un archivo comprimido, entonces Módulo :: instalar proporciona una solución - si coloca su script en script/y luego

install_script(glob 'script/*'); 
auto_install; 

en su archivo Makefile.PL, entonces no solo 'make install' colocará su script en algún lugar útil para usted, sino que 'make installdeps' invocará a cpan (o si está presente, cpanplus) para instalar todas las dependencias que faltan por usted.

4

Para añadir a las respuestas finos existentes ...

Algo de lo que se recomendó en PBP no es un mal consejo, pero Perl sigue su marcha. Cuando fue escrito, los objetos al revés fueron el nuevo calor. Ahora el alce ha absorbido todo. Hay MooseX::InsideOut que le da la potencia de Moose con la encapsulación total de Class :: Std, pero a menos que trabaje con programadores indisciplinados, no es realmente necesario.

Las características de Moose que no necesita ahora, las necesitará con el tiempo. Incluso si no los necesita a todos, con Moose no tendrá que usar y aprender otro sistema OO cada vez que necesite una característica interesante. ¡Y Dios quiera que necesite DOS funciones al MISMO TIEMPO!

+0

Existen algunas aplicaciones en las que es necesario que no tengan nada que ver con los "programadores indisciplinados" –

+0

@Evan Me viene a la mente evitar los choques de clave privada con las subclases. ¿En que estabas pensando? – Schwern

+0

... Filehandles, o cualquier otro objeto oscuro que pueda ser bendecido pero que probablemente no debería ni puede adjuntar datos. –

0

También hay un objeto Perl Módulo :: InsideOut, mantenido de forma activa a partir de 2010.

especie de precursor a Moose, o para ser claro: el desarrollo comenzó de forma independiente al mismo tiempo que comenzó alces,

Sé que existe, pero no lo he usado.

Cuestiones relacionadas