zotero importar compartir como cepal archivos agregar php design organization

php - importar - zotero cepal



¿Cómo debería organizar una estructura de directorios de una biblioteca de programación de propósito general? (7)

Como es una biblioteca multiusos dedicada a resolver problemas versátiles o proporcionar interfaces para funciones comunes, es mejor tener estructura por subject que puede ser DataType / Technology / Language / Protocol, etc. de la siguiente manera:

+ Http - request - response + util - status_codes + Html - Validator + Form - UploadFile + Tag + JavaScript - JSON + Ajax + XML - Reader - Writer - Parser + DataType - Array - Integer - String - Double - Float + util - datatypes_cast_lib

En la parte superior tenemos:

  • Http, que es un protocolo por lo que su Http.request sería una interfaz para realizar solicitud Http
  • Html, que es el lenguaje de marcado, por lo que Html.Form.UploadFile proporcionará al desarrollador funciones para crear formularios de archivos de carga
  • JavaScript que es el lenguaje de programación, por lo que su Javascript.JSON resolvería problemas de conversiones de JSON a Arrays, tal vez
  • Ajax que es tecnología
  • XML que es lenguaje de marcado
  • DataType que es ... bueno, tipo de datos.

Tenga en cuenta que los status_codes permanecen util en Http . Cada sub-biblioteca puede tener sus propias funciones de utilidades como DataType Lib puede necesitar datatype_cast_lib para saber cómo hacer malabares con los tipos de datos.

Esta forma de organización de la biblioteca se asemeja más a la organzación de PECL

Buena pregunta, por cierto! Yo mismo hice la misma pregunta con frecuencia. He estado organizando y reorganizando la estructura de mis directorios durante años. Realmente depende del proyecto. He adaptado la estructura anterior correspondiente a la estructura que ha proporcionado https://github.com/homer6/altumo/tree/master/source/php .

He estado escribiendo mi propia biblioteca PHP de propósito general durante un tiempo y estoy pensando en cómo organizar la estructura del directorio, pero quería obtener las ideas de la gente antes de formalizar la estructura del directorio de la biblioteca.

Esto es lo que tengo hasta ahora: https://github.com/homer6/altumo/tree/master/source/php

Pensaba que podría hacerlo "por tema" o "por categoría". Hasta ahora, solo puedo pensar en un ejemplo que me gusta de "Por categoría": Boost http://www.boost.org/doc/libs/1_46_1/?view=categorized

Además, Qt está organizado por módulo, pero creo que es un poco complicado porque todo está algo relleno en QtCore http://qt-project.org/doc/qt-5/qtmodules.html

¿Algunas ideas?

Gracias por adelantado.

ACTUALIZACIÓN: Encontré un libro realmente bueno que me ha enseñado una serie de convenciones geniales de diseño de bibliotecas a seguir: http://www.apibook.com/blog/

ACTUALIZACIÓN: Encontré un artículo interesante que menciona la organización del código ( http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html ). En la parte inferior, dice: "¿Cómo se verá el árbol de códigos? Él quiere que estas palabras lo describan: simple, pragmático, elegante, ortogonal, composable. Este es un ideal, la realidad es un poco diferente".


Diría que un buen lugar para comenzar es observar cómo lo están haciendo otros frameworks y / o bibliotecas.

Personalmente, me gusta la forma en que Zend Framework está organizado, con un espacio de nombres bastante plano, que tiene todos los componentes principales en el directorio de Zend. Al usar la estructura del proyecto Zend MVC, obtienes un autocargador añadido que traduce _ a / todas las clases se nombran como Zend_Form y se colocan en un archivo llamado Form.php dentro del directorio Zend, de modo que cuando se llama a new Zend_Form , el autocargador busca Zend/Form.php . Solo la clase "principal" está directamente dentro de la carpeta Zend, los archivos de clase adicionales, como excepciones y abstractos se colocan dentro de una carpeta Zend/Form , y los nombres de clase nombrados como Zend_Form_Exception - que hacen que el autocargador busque Zend/Form/Exception.php .

Otro punto es mantener la lógica de back-end lejos de cualquier carpeta public_html. EG: solo los archivos que deberían ser accesibles directamente para los usuarios deberían estar aquí (javascript, css y your loader.php + .htaccess). Luego, haga que loader.php incluya los archivos que necesita, generalmente un nivel de directorio arriba.

Las bibliotecas externas se suelen tratar como tales y se separan del resto del código en una carpeta / lib, / library y / o / vendor para indicar que los autores externos son responsables de estas clases.


En primer lugar, la estructura elegida es una decisión de compromiso , lo que significa que tendrá que tratar y priorizar algunos aspectos sobre otros dependiendo de su propósito. Existen algunos criterios de agrupación que puede seguir, como:

  • Cohesión funcional , creo que debería ser la más fuerte en su diseño. Las clases / archivos / recursos con la misma o similar funcionalidad deberían estar juntos
  • Jerarquía de componentes , dependiendo del nivel de granularidad que elija, eso significa que si prefiere componentes de grano fino frente a grano grueso, tendría más o menos archivos / recursos en una carpeta. Esto se puede controlar utilizando jerarquía de carpetas y anidamiento.
  • Cambiar , es más probable que se modifiquen algunos archivos que otros, debe tener esto en cuenta para proporcionar una jerarquía de carpetas según la probabilidad de modificación.
  • Extensibilidad : para que un marco sea útil y adaptable a casi cualquier escenario, debe brindar la posibilidad de ampliar componentes y funciones. Agregar una carpeta para extensiones (plugins aka) es una buena idea.

Hay muchos criterios que debe usar, pero siempre tenga en cuenta el Principio de KISS . Puede buscar administración de paquetes en libros como El proceso de desarrollo de software unificado (Ivar Jacobson y otros), espero que esto pueda ser útil.



Sugiero que mires cómo se organizan las cosas en dos frameworks php 5.3 recientes, Symfony2 y Lithium .

Los desarrolladores centrales detrás de ellos estaban activos (junto con otros desarrolladores principales de frameworks y celebridades de php) en la definición de convenciones estándar de php 5.3 para que sus respectivos componentes pudieran jugar entre ellos, Zend y otras bibliotecas / frameworks que pudieran seguir las mismas convenciones:

http://groups.google.com/group/php-standards/web/php-coding-standard

En ambos casos, los paquetes / bibliotecas son ciudadanos de primera clase, y los dos siguen patrones similares cuando se trata de organizarlos.

El núcleo de litio, en particular, es una biblioteca en sí misma. Está organizado así:

$ ls LICENSE.txt analysis core g11n security template tests action console data net storage test util

(Tiendo a encontrar Symfony 2 un poco más desordenado / menos predictivo, pero eso es solo mi propia opinión).


Yo diría que depende de cómo / si usas los espacios de nombres, etc. De lo contrario, vería un uso para algo como el diseño del directorio de ZendFramework (aunque es feo como sin ... jeje). Entonces generalmente tengo un Core que contiene funcionalidad base que todas las otras partes pueden usar como Array y manipulación de cadenas, Cifrado / Descifrado

+ Core - Array - String + Encryption - MD5 - SHA1 ...

Luego trato de pensar en todas las carpetas posteriores como partes / módulos aislados. ¿Tengo una carpeta Jquery con muchos ayudantes de JQuery? Entonces esa podría ser una buena carpeta para agregar.

+ Core - Array - String + Encryption - MD5 - SHA1 ... +JQuery

¿Mi JQuery requiere algunos detalles HTML que otros "módulos" también pueden usar? Entonces eso debería ir a Core. Por ejemplo, mis ayudantes de JQuery pueden hacer uso de JSON.

+ Core - Array - String + Encryption - MD5 - SHA1 ... + Encoding - JSON +JQuery

Si es específico de JQUery, debe recitar bajo JQuery.

+ Core - Array - String + Encryption - MD5 - SHA1 ... + JQuery - Datepicker

Al hacer siempre la pregunta "¿Es esto algo que otras partes de mi biblioteca utilizarán y / o ampliarán?" obtendrá una buena idea si la funcionalidad en cuestión debe ser parte de su núcleo o parte de su módulo de biblioteca específico.


<project name>/ application/ configs/ application.ini controllers/ helpers/ forms/ layouts/ filters/ helpers/ scripts/ models/ modules/ services/ views/ filters/ helpers/ scripts/ Bootstrap.php data/ cache/ indexes/ locales/ logs/ sessions/ uploads/ docs/ library/ public/ css/ images/ js/ .htaccess index.php scripts/ jobs/ build/ temp/ tests/

fuente: http://framework.zend.com/manual/en/project-structure.project.html