Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Programación General (http://www.forosdelweb.com/f14/)
-   -   Modelo 3 capas? PHP+C#+MSSQL? (http://www.forosdelweb.com/f14/modelo-3-capas-php-c-mssql-404550/)

Punchi 25/06/2006 17:21

Modelo 3 capas? PHP+C#+MSSQL?
 
Saludos!

Para la universidad tengo que hacer una tarea de un software con un modelo de 3 capas. Los lenguajes son a libre eleccion, pero no se con cuales podria trabajar =S

Se puede trabajar con PHP + C# + MSSQL?

El modelo logico me dijeron que lo trabajara con J2EE, pero la verdad es que no conosco JAVA, aunque me dijeron que seria un plus trabajar con el. Conosco un mas C# y mas PHP que ASP.NET, por lo que... se puede trabajar PHP junto con C# ?? que lenguajes tengo para escojer para el modelo de 3 capas?

Thanks!

hpfloresj 25/06/2006 18:08

Para tu proyecto o cualquiera que sea puedes trabajar con los lenguajes que mas domines, yo trabajé un proyecto cliente/servidor en 3 capas con php y sql server utilizando la metodología RUP y UML, al principio tenia unos problemas con los servlets, que en php no existe, pero los pude superar, con respecto a php y mssql, tranquilamente los puedes implementar son tecnologias que se pueden juntar, sería mejor si en tu proyecto pondrías procedimientos almacenados con php.
Atte. hp

Punchi 25/06/2006 18:39

jeje... como es posible trabajar con cliente/servidor en 3 capas? jeje
el modelo logico y de despliegue los tienes juntos =S

se puede ocupar PHP+C#+MSSQL por ejemplo?

cbwarz 25/06/2006 20:35

Sino usas J2EE por el java, entonces haz el UI en ASP.Net, el modelo usando Enterprise Services y la base de datos.

Todo en C#

Saludos

TolaWare 25/06/2006 22:14

Cita:

Iniciado por hpfloresj
Para tu proyecto o cualquiera que sea puedes trabajar con los lenguajes que mas domines, yo trabajé un proyecto cliente/servidor en 3 capas con php y sql server utilizando la metodología RUP y UML, al principio tenia unos problemas con los servlets, que en php no existe, pero los pude superar, con respecto a php y mssql, tranquilamente los puedes implementar son tecnologias que se pueden juntar, sería mejor si en tu proyecto pondrías procedimientos almacenados con php.
Atte. hp

Existen 2 patrones de diseño de capas muy usados:

2 capas: cliente/servidor
3 capas: presentacion/negocio/persistencia o tambien llamado interfaz/control/entidad.

Otro detalle, la capa de entidad o persistencia, no es un DBMS, la capa de persistencia es la que abstrae a la aplicacion de la bases de datos que usemos. Por lo tanto es imposible programar esta capa con MSSQL, ni con nigun otro motor de base de datos.

Como punto final, te recomiendo que si quieres usar php que utilize como soporte MSSQL, pues te recomiendo que programes las tres capas en php.

Saludos

Punchi 25/06/2006 22:43

mmm.... es condicion de la tarea dividir el modelo logico (de control, como le llamas) de la capa de interfaz y de datos (por lo que tengo entendido es de datos, y en el caso que necesito, una base de datos MSSQL) por lo que tengo que ocupar PHP o ASP.NET u otro solamente para el despliegue y recivo de informacion.

Si tuviese la capade interfaz y de logica en PHP seria una aplicacion cliente-servidor, ¿no?

TolaWare 25/06/2006 23:05

Cita:

Iniciado por Punchi
mmm.... es condicion de la tarea dividir el modelo logico (de control, como le llamas) de la capa de interfaz y de datos (por lo que tengo entendido es de datos, y en el caso que necesito, una base de datos MSSQL) por lo que tengo que ocupar PHP o ASP.NET u otro solamente para el despliegue y recivo de informacion.

Si tuviese la capade interfaz y de logica en PHP seria una aplicacion cliente-servidor, ¿no?

Depende de como este programada la aplicacion.

La separacion de capas no tiene nada que ver con el lenguaje que usas, puedes programar toda una aplicacion en Java y que sea de 3 capas, la diferencia esta en que al programar en capas se realiza una separacion de funcionalidades. Las funciones de mostrar y leer datos, va en la capoa de interfaz, la tarea de procesar estos datos (sumas, calculo de totales, etc) va en la capa de negocio. y La tarea de guardar, leer y actualizar los datos en la BD, es tarea de la capa de datos.

cbwarz 26/06/2006 14:54

@Tolaware
Me parece que cuando surgieron los manejadores de bases de datos como Oracle es cuando nacio el termino Cliente/Servidor y el Servidor como tal representaba una capa.

@Punchi
Si lo que estas implementando es el patron Capas ("Layers"), entonces:
Capa Interfaz -> UI: ASP.Net con C#
Capa Aplicacion -> Controlador: ASP.Net con C#
Capa Modelo: Enterprise Services con C#
Capa Middleware ("Servidores"): DAO en Enterprise Services con C#

Generalmente se usa capas para poder dividir la funcionalidad, evitar el acoplamiento y varios beneficios mas, pero uno de los puntos mas importantes es que la funcionalidad va a estar "potencialmente" distribuida. Esto es, el cliente en una maquina, el controlador en un servidor web, el modelo y DAO en otro servidor, etc, etc.

Por ultimo, te recomiendo que leas el libro: UML y Patrones 2da Ed.

Saludos

cbwarz 26/06/2006 15:00

Recorde una liga a un documento de "Layers" muy bueno de IBM, lo puedes encontrar aqui
http://groups.msn.com/ISWOO/arquitec...40244238649425

Punchi 26/06/2006 17:27

jeje... nombraste 4 capas...

estaba viendo que en PHP se puede hacer la de interfaz y la logica mediante templates.. bueno eso lo voi a postear en el foro de PHP.

pero... ¿como diferencio una capa de otra? la capa de interfaz por ejemplo. Solo arroja y captura strings? luego esta capa llama a las funciones de la logica, la cual hace todos los calculos para luego llamar a la capa de datos y esta es la ke interactua con la BD?

alguna explicacion breve plis... creo que en la U no lo entendi bien entonces. Yo estaba convencido que eran solo 3 capas y que cada una tenia un lenguaje de programacion diferente.

grax!

cbwarz 27/06/2006 07:47

El numero de capas depende de tus necesidades. Se recomienda no mas de 7 capas.

Te recomiendo leer!, checa la liga que te pase para buscar el .pdf que esta en ese foro.
Luego comprate o ve en la biblio el libro UML y Patrones donde habla sobre el patron Capas ("Layers")

Saludos

Valkam 28/06/2006 08:52

Struts
 
Cita:

Iniciado por hpfloresj
Para tu proyecto o cualquiera que sea puedes trabajar con los lenguajes que mas domines, yo trabajé un proyecto cliente/servidor en 3 capas con php y sql server utilizando la metodología RUP y UML, al principio tenia unos problemas con los servlets, que en php no existe, pero los pude superar, con respecto a php y mssql, tranquilamente los puedes implementar son tecnologias que se pueden juntar, sería mejor si en tu proyecto pondrías procedimientos almacenados con php.
Atte. hp

Existe un patrón de diseño ampliamente utilizado que especifica una arquitectura de dos capas: el Modelo-Vista-Controlador.

Este patrón divide la aplicación en tres componentes: la interfaz (presentación) que sería la vista, la lógica de negocio que sería el modelo y el controlador que sería el encargado de gestionar los eventos de la interfaz para actuar sobre el módelo. Tanto la vista como el controlador se incluyen en una misma capa de interfaz.
Normalmente la tercera capa viene cuando se quiere incorporar un almacenamiento persistente (un almacen de datos). En ese caso es una buena práctica incluir una capa de abstracción más que independice al resto de tu aplicación del motor de BD que vayas a usar. En realidad no tienes por que usar tres lenguajes distintos, sino que cuando se habla de una aplicación en tres capas se definen tres niveles de abstracción bien separados: la presentación, la lógica de negocio y el modelo de datos. Estas capas deben estar completamentes separadas ofreciendo únicamente una serie de servicios al resto de capas sin que estas tengan que saber que hay por detrás.

Yo te recomiendo que uses el Framework Struts. Es un framework de desarrollo que implementa el patron Modelo Vista Controlador y que te permite el desarrollo rápido de aplicaciones web. La interfaz la tendrías en JSP, la lógica de negocio en Java y puedes usar cualquier gestor de bases de datos (al que te recomiendo que te conectes con JDBC).

Todo es mundo Java, pero nunca es mal momento para aprender :-)

cbwarz 28/06/2006 15:39

umm, el MVC es de 3 capas
1. Model
2. View
3. Controller

Generalmente se piensa que la vista y el controlador estan en la misma capa pero en realidad son capas diferentes, debes poder cambiar tu capa de vista sin cambiar la capa de control o puedes cambiar tu capa de control sin afectar tu vista o modelo.

El struts en particular "oculta" la capa de control, la hace automatizada, tu solo especificas "Comandos" y el struts se encarga de todo. Pero existe.

Saludos

Valkam 28/06/2006 16:24

Cita:

Iniciado por cbwarz
umm, el MVC es de 3 capas
1. Model
2. View
3. Controller

Generalmente se piensa que la vista y el controlador estan en la misma capa pero en realidad son capas diferentes, debes poder cambiar tu capa de vista sin cambiar la capa de control o puedes cambiar tu capa de control sin afectar tu vista o modelo.

El struts en particular "oculta" la capa de control, la hace automatizada, tu solo especificas "Comandos" y el struts se encarga de todo. Pero existe.

Saludos

Sí, estoy de acuerdo contigo, para mi son tres capas aunque en realidad si te vas a cualquier libro de patrones de diseño no se especifica una tercera capa como tal. Quizás sería más adecuado hablar de tres componentes separados ya que como dice dices deberíamos poder sustituir por ejemplo la vista sin tener que modificar el controlador. Esto de hecho es muy común aunque creo que es bastante dificil realizar cambios en la interfaz sin que te efecte en el controlador. Si lo consigues has hecho sin duda un buen diseño!!

cbwarz 28/06/2006 17:31

ummm, en realidad asi se documenta en los libros, 3 capas.

http://es.wikipedia.org/wiki/MVC

[Del wiki]
Es común pensar que una aplicación tiene tres capas principales: presentación (IU), dominio, y acceso a datos. En MVC, la capa de presentación está partida en controlador y vista. La principal separación es entre presentación y dominio; la separación entre V/C es menos clara.
[/Del wiki]

Saludos

NOTA: Creo que te refieres al principio de separacion de Presentacion y Modelo.

Punchi 28/06/2006 21:59

=O !

que bien... estoi aprendiendo de a poco ahora a lo que se refieren ^^
es por eso que el profe recomendo utilizar J2EE... bueno, la verdad es que no tengo mucho tiempo como para aprender un nuevo lenguaje y completar la tarea, asi que lamentablemente me voi a tener que ir por lo que mas domino, que seria PHP.

interesantes posts... creo que voi aprendiendo jeje... una consulta para asegurarme plis: la separacion de capas se hace por medio de funciones que separen lo que es el despliegue, procesamiento y llamados a la base de datos?

osea que por ejemplo para el caso de PHP, tendria que crear la pagina HTML de tal manera que cuando inserte una funcion de despliegue de noticias por ejemplo, ocurra que de lo mismo en donde la despliegue ya que no va a afectar la capa de... logica? y cuando quiera cambiar la noticia cambio el codigo de la capa de la esa logica para que asimismo no me influya en nada el despliegue de la noticia en HTML. ¿estoy en lo correcto?.. si es asi.. ¿en donde queda la capa de datos? =S

grax! ^^U

Valkam 29/06/2006 02:17

Arquitectura en tres capas
 
Cita:

Iniciado por Punchi
=O !

que bien... estoi aprendiendo de a poco ahora a lo que se refieren ^^
es por eso que el profe recomendo utilizar J2EE... bueno, la verdad es que no tengo mucho tiempo como para aprender un nuevo lenguaje y completar la tarea, asi que lamentablemente me voi a tener que ir por lo que mas domino, que seria PHP.

interesantes posts... creo que voi aprendiendo jeje... una consulta para asegurarme plis: la separacion de capas se hace por medio de funciones que separen lo que es el despliegue, procesamiento y llamados a la base de datos?

osea que por ejemplo para el caso de PHP, tendria que crear la pagina HTML de tal manera que cuando inserte una funcion de despliegue de noticias por ejemplo, ocurra que de lo mismo en donde la despliegue ya que no va a afectar la capa de... logica? y cuando quiera cambiar la noticia cambio el codigo de la capa de la esa logica para que asimismo no me influya en nada el despliegue de la noticia en HTML. ¿estoy en lo correcto?.. si es asi.. ¿en donde queda la capa de datos? =S

grax! ^^U

Vamos a olvidarnos un poquito del patrón MVC (aunque te recomendaría utilizarlo siempre y además yo creo que puede ser el de uso más extendido) y nos centramos en las tres capas. Tradicionalmente un diseño en tres capas consta de las que ya se ha hablado: presentación, lógica de negocio y persistencia o almacen de datos. Para que sea realmente un diseño en tres capas tienen que estar totalmente separadas. Cada capa debe ofrecer una serie de servicios (que los puedes ver como una API) a las capas superiores. Por ejemplo, defines que acciones se pueden hacer sobre una noticia. Pongamos que solo tienes una función en tu lógica que es publicarNoticia. Ese servicio debe ofrecerse a la capa de presentación para ser llamado desde la interfaz. Quizás para poder publicar una noticia debes hacer algunas cosas mas que almacenarla en la base de datos y mostrarla. Esa serie de acciones deben ser llamadas desde publicarNoticia pero nunca debería a estar accesibles a la capa de presentación. Es decir tu ofreces una API al exterior que abstrae de como se hacen las cosas en tu lógica de negocio. De esta forma la desacoplas de la presentación. Si el día de mañana quieres cambiar por completo la interfaz no te afectará al resto de la aplicación.
Todo esto se hace utilizando el patrón Fachada. Te recomiendo que lo busques y le eches un vistazo (aun no puedo poner links).

Para el acceso a datos también se puede utilizar el patrón fachada, aunque hay uno específico para abstraer la capa de persistencia que es el patrón DAO (Data Access Object). En plataformas como .NET ya te viene implementado y solo hay que adaptarlo. Si sigues ese patrón correctamente, el día de mañana te podrías dar cuenta de que tu aplicación por ejemplo no almacena una gran cantidad de datos y podrías aliviarla sustituyendo el motor de base de datos por un fichero XML por ejemplo sin que eso afecte para nada al resto de la aplicación. Solo tendrías que programar la forma de acceder al XML, pero tu logica de negocio en ningun momento sabe que forma de almacenamiento estas usando. Ella llama a una función que podría ser guardarNoticia siempre y el DAO se encarga de almacenarla correctamente en una BD o en un fichero, lo que estes utilizando en ese momento.

Un Saludo!!

cbwarz 29/06/2006 07:39

Buena explicación Valkam :)

Voy a agregar unas imagenes para que sea mas grafico:

Este es el patron MVC como esta implementado en Struts:
http://www.ibm.com/developerworks/we...ges/image1.jpg
Cada "Action" de struts ligado al controlador es en realidad el patron "Command".

Este es el patron Capas:
http://msdn.microsoft.com/library/en...ding_Fig04.gif
Aun cuando el ejemplo muestra 3 capas (que es lo tipico) podrias tener muchas mas, se recomienda no mas de 7.
Si has tenido chance de conocer como funciona las redes segun OSI veras que tiene una arquitectura de capas, es algo semejante a lo que tratamos de hacer con el software usando "Capas".

Saludos

Punchi 04/07/2006 19:59

=O !!

gracias por los post y en especial por los ultimos 2 =D !! :si:

tengo una idea mucho mas clara ahora :-)

grax!! =D !

indioalba 24/04/2008 11:48

Re: Modelo 3 capas? PHP+C#+MSSQL?
 
Hola, me he aclarado mucho con vuestras explicaciones pero querría saber si el patrón layer y el patron MVC son incompatibles, o por el contrario son complementarios.

Gracias


La zona horaria es GMT -6. Ahora son las 05:32.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.