2011-10-10 17 views
7

He estado codificando durante años y me he encontrado en un punto de frustración. Estoy trabajando en un nuevo servicio basado en web que también tiene una interfaz de usuario y se desarrollará desde cero. Utilizará algunos componentes de código abierto, pero es principalmente algo nuevo por derecho propio.PHP/JavaScript Patrones de diseño para infosystems basados ​​en web

Pero aquí está mi problema. La construcción de un sistema de este tipo significa la construcción de todos esos componentes:

  • PHP backend
  • vistas HTML
  • estilos CSS
  • JavaScript front-end
  • AJAX conexiones asíncronas

quiero todos ellos siguen el mismo 'patrón', de forma que un módulo en el sistema se compone de una carpeta o un conjunto de archivos que incorpora todos los c componentes dentro de ese módulo.

Pero estoy teniendo un momento difícil con la arquitectura para que me guste. Esto es lo que tengo hasta ahora:

  • Todo el sistema principal está escrito más o menos en PHP procedural. Esto resuelve la URL de solicitud, se trata de almacenamiento en caché, registro y depuración y cargas en otros componentes.
  • PHP, al compilar la página, se carga en archivos javascript específicos del módulo, archivos CSS, archivos HTML y otros componentes basados ​​en el módulo actual. Esto significa que cada módulo es lo más liviano posible, mientras que se puede ampliar sin embargo en función de las necesidades actuales de los módulos.
  • El sistema también incorpora componentes OOP de objetos (como "usuarios" u otro tipo de clases) que se pueden usar en todo el sistema.
  • El sistema está construido con principios de MVC, aunque sin OOP.

Pero me siento realmente -dirty- por haber construido el sistema principal de forma procedural. Empecé a escribirlo en OOP al principio, pero me encontré con dolores de cabeza debido a tener que hacer que todo encajara en el mismo sistema. Era OOP, pero estaba estrechamente acoplado, lo que no me gustó mientras se escribía la forma de OOP, los componentes realmente no eran tan independientes o eran simplemente una molestia de manejar.

¿Hay algún patrón o guía que pueda seguir para obtener un mejor resultado? Lo que me gusta del sistema actual es que puedo llamar a cualquier cosa, vistas previas a la vista de PHP o HTML, estilo CSS, funciones adicionales de Javascript y comunicación AJAX por demanda, manteniendo el footpring maravillosamente pequeño, pero parece sucio. Incluso uso una conexión de base de datos global para la base de datos (aunque es un objeto global).

¿Alguna idea? No sería un problema en absoluto si fuera solo un idioma, pero tratar de hacer que todo funcione en conjunto es un poco dolor de cabeza.

Gracias!

+3

¿Ha investigado cualquiera de los miles de marcos de PHP/sistemas CMS/etc? Hay muchos ejemplos de cómo esto se puede hacer por ahí. – Mat

+0

Es muy difícil responder a su pregunta porque no presenta ningún problema real. Actualmente estoy trabajando en un sistema como el uno pero fuera de curso con algunas diferencias. Estoy usando MVC/OOP. No puedo imaginar que lo estés manejando procesalmente. Creo que hasta que su proyecto tenga algunos límites, no debería haber ningún problema en OOP. –

+0

Puede consultar Patrones de arquitectura de aplicaciones empresariales, patrones de GoF, etc. e implementarlos usted mismo. Sin embargo, la respuesta más fácil (y más obvia) es ver cómo los marcos (que ya han enfrentado este problema) han implementado estos patrones y (a) usan el marco o (b) adaptan los enfoques del marco en su aplicación. Busque marcos de código abierto en su paradigma elegido, observe cómo hacen las cosas y vea qué chistes con su aplicación. –

Respuesta

4

http://agiletoolkit.org/ implementa exactamente lo que estás buscando. Su código fuente está disponible en http://github.com/atk4/atk4 para que pueda aprender de allí.

Lo que aprendí muchas cosas mientras creating Agile Toolkit.

  • Mirar los sistemas de escritorio. - Cocoa, Objective Windows y otros sistemas de escritorio orientados a objetos han resuelto esos problemas hace mucho tiempo. Crea vistas, conecta acciones, define call-backs. Esto se asigna a vistas con plantillas HTML, enlaces de JavaScript y solicitudes AJAX.

  • Árbol de objetos en tiempo de ejecución. En Agile Toolkit, la primera fase es la inicialización. Durante esta fase, los objetos se insertan el uno en el otro. Por ejemplo, agrega el botón al formulario y agrega el formulario a la página. Luego está la fase de renderizado que recursivamente produce HTML de todo. Esto tiene mucho más sentido que tener componentes echo HTML.

  • jQuery UI widgets. Usar esos fue una gran manera de resolver muchos problemas. Las vistas en Agile Tolokit pueden hablar con los respectivos widgets de interfaz de usuario de jQuery.

  • Los objetos que ha mencionado son "Modelos" en Agile Toolkit. Si está buscando una versión independiente, puede confiar en algún marco ORM. Me he hecho mi propio para tenerlo más integrado con las Vistas.

  • Reconsiderar el acoplamiento. Si está desarrollando todo el sistema usted mismo, el acoplamiento le brinda muchos beneficios. Especialmente si se trata de una arquitectura orientada a objetos y heredas cosas. Necesitará experiencia en Java o experiencia de desarrollo de escritorio para hacer esto bien.

Enlaces:

+0

No es exactamente lo que estoy buscando, pero ciertamente está más cerca de lo que tengo en mente en comparación con los marcos inflados. – kingmaple

2

Sin saber nada, mis pensamientos:

  • Si usted no le gustó su código de programación orientada a objetos, es probable que lo diseñó mal. La idea de la orientación a objetos es que los objetos representan las cosas de manera muy natural y, como tales, deberían ser bastante fáciles de manejar. Si es el acoplamiento lo que no te gusta, existen técnicas para solucionarlo.
  • Parece que su patrón MVC es incorrecto. Las cosas HTML/CSS/JavaScript deberían manejarse todas en el aspecto Ver. Me parece que has usado algunos principios de MVC sin tener en cuenta a los demás. Por supuesto, sin tu código esto solo puede ser una sospecha.
+0

Bueno, depende. MVC, en el sentido más clásico, es diferente de cómo la gente generalmente lo implementa. Javascript y el navegador son un controlador, no una vista. Pero aparte de eso, mi principal problema era que tenía esta gran clase para el motor principal, lo cual era inútil, ya que todo dependía de eso. Siempre he pensado que si hay una sola instancia de una clase (y nunca puede haber más de una), no debería ser una clase en primer lugar. – kingmaple

+0

Estoy de acuerdo con la parte de JavaScript: puede ser algo del controlador. Y si solo puede tener una instancia de una clase (y nunca puede haber más de una), eso no significa que no deba hacer una clase. Sin embargo, parece que trataste de clasificar a Dios. No hagas eso. –

+0

Pero, ¿qué me recomendarías que mirara? Porque quiero un sistema que tenga componentes principales (como archivo CSS principal, biblioteca de funciones principales para PHP y JavaScript/AJAX, así como archivos CSS, bibliotecas de funciones y JavaScript/AJAX por módulo bajo demanda). Quiero el menor espacio posible, mientras que cada módulo puede funcionar de forma independiente. Ahora estoy de acuerdo en que los módulos deberían ser clases ampliadas de la clase principal, pero ¿cómo construir una arquitectura para que funcione? ¿Dónde estaría la solución si no fuera en una clase de Dios? Sólo necesito una cierta dirección aquí, ya que no quiero comprometer :) – kingmaple