2009-08-05 8 views

Respuesta

11

CSLA es un marco de objetos comerciales que le permite crear fácilmente objetos comerciales sobre una capa de datos. Le permite diseñar su aplicación con principios orientados a objetos sólidos y una buena separación de preocupaciones.

Le recomiendo que lea el libro CSLA de Rocky Lhotka llamado Expert C# 2008 Business Objects. Eso no solo le enseñará sobre el marco, sino que también le enseñará buenos principios de arquitectura de software.

You can grab the book here on Amazon

+0

Es este un marco compatible. Y cuál sería mi punto de decisión para usar este marco. – Greens

+1

Esto es compatible con Rocky y es compatible muy bien. Hay un lugar para reportar errores y a menudo se responden rápidamente. –

+16

fácilmente? ¿Puedo citarlo sobre eso? – D3vtr0n

1

CSLA se describe en detalle here. El nuevo book es un excelente punto de partida. Como un gran complemento al libro, recomendaría revisar nuestro CSLA 3.8 templates. Rocky recomienda utilizar un Generador de código, y tenemos el conjunto de plantillas líder, que lo pondrá en funcionamiento en muy poco tiempo.

Gracias -Blake Niemyjski (autor de la CodeSmith CSLA Templates)

66

mis opiniones de mi experiencia w/una base de código LOC 1,7 M:

  1. CSLA está destinado a un entorno de aplicación/base de datos distribuida. Esta es la razón por la cual el objeto comercial básico es y hace todo, por ejemplo, es su propia persistencia de datos. Un objeto (y todo lo asociado remotamente con su estado) está destinado a ser serializado, enviado a una aplicación y/o servidor de datos diferente y funcionar.
  2. Si lo anterior no es un problema que necesita resolver, CSLA es excesivo, a lo grande. Nuestro equipo de desarrollo lamenta haberse comprometido con CSLA.
  3. Hacer malabarismos con todas las bolas de CSLA en una interfaz de usuario con ventana compleja es difícil. Tenemos pantallas de pestañas múltiples (que a su vez pueden abrir subpantallas) que, a menos que siga el flujo de entrada de datos de "izquierda a derecha, de arriba a abajo", y haga clic en Guardar a menudo, termina poniendo y/o obteniendo datos incompletos hacia/desde la base de datos; o eliminando datos que acaba de ingresar. Sí, nuestros codificadores originales son los culpables, pero también lo es CSLA ... Parece que hay tantas partes móviles para habilitar, controlar y coordinar las funciones de CSLA. Es como tener que lidiar con todos los diales & interruptores de un avión de combate cuando todo lo que realmente necesita es algo más parecido a un Cessna 152.
  4. Escribirá muchos códigos personalizados para habilitar las características de CSLA. Por ejemplo, CSLA nunca se confundirá con las herramientas de mapeo relacional de objetos (ORM) como Hibernate y Entity Framework. Nuestros métodos SAVE() no son triviales, por lo que son triviales.
  5. Fomentando el uso de problemas de compuestos de generadores de código. Usamos CodeSMith para generar clases a partir de tablas de datos. Así que terminamos con un código que tiene una correspondencia 1-1 de tabla a clase C#. Por lo tanto, debe escribir todo el código para manejar DataStore a sus objetos "reales".
  6. El almacenamiento y recuperación de datos es muy ineficiente con CSLA. Debido al Behemoth, el paradigma céntrico monolítico BusinessObject-do-all-and-knows-all, los objetos terminan haciendo una captura de datos de un solo objeto a la vez y crean instancias. Las colecciones de objetos compuestos complican significativamente el problema. Un único "obtener este objeto" siempre da como resultado una cascada de recuperaciones de datos separadas (una o más para cada objeto individual) para crear una instancia de la herencia completa & cadenas de relaciones compuestas. Es conocido como el "problema de consulta N + 1". Ah, y la obtención de datos SIEMPRE da como resultado la creación de un nuevo objeto, incluso si solo estamos actualizando uno existente. No es de extrañar que nuestras pantallas más complejas sean FUBAR.

Le permite al arquitecto su aplicación con los directores orientados a objetos sólidos y una buena separación de las preocupaciones.

Sí y no. Mayormente no

BusinessObject maneja su propio almacenamiento de datos. Eso es anti separación de preocupaciones.

"Te permite ..." bueno, sí, también lo hace una pantalla de editor de texto en blanco, pero no te obliga ni te alienta como lo hace el framework MVC.NET, por ejemplo. En mi humilde opinión, CLSA ofrece absolutamente cero beneficios para garantizar que el código que desarrolle siga los "principios sólidos de OO". De hecho, los programadores con habilidades débiles de OO (la mayoría, en mi experiencia) realmente se destacarán cuando usen CSLA. ¡Ay del programador de mantenimiento!

CSLA es el elemento secundario del principio orientado a objetos sólidos favor de la composición por herencia. El código de CLSA no se puede verificar. Debido a que BusinessObject heredado es, necesita y necesita todo, de una sola vez, no es probable que pueda obtener mucha cobertura de prueba. No se puede llegar a las piezas porque todo está estrechamente acoplado. El marco no es susceptible de inyección de dependencia. Es una cortina de hierro de código.

Su código será difícil de depurar. Las pilas de llamadas se vuelven muy profundas y, a medida que te acercas al centro del sol, por decirlo así, todo se convierte en reflejo: "¿qué métodos se llamaron &^#?" Y simplemente te pierdes. período.

EDITAR 7 Mar 2016

Lo más penetración se puede añadir después de la entrada original? Dos cosas, quizás:

En primer lugar, es se siente como CSLA tiene alguna promesa. Si supiéramos cómo hacer malabares con todas esas partes móviles juntas. Pero CSLA es tan enigmático que incluso las cosas que hemos hecho bien se corrompen con el tiempo. En mi humilde opinión, sin un sólido equipo de CSLA con todos los recursos, cualquier implementación está condenada. Sin una vibrante "fuente abierta" de referencias técnicas, capacitación y comunidad, no hay esperanza. En casi una década, nuestro código CSLA, en mi análisis final, solo está agravando la deuda técnica.

En segundo lugar, aquí es un comentario reciente que hice, a continuación:

Nuestra complejidad menudo no parece encajar en la infraestructura CSLA por lo que escribimos fuera del marco. Esto y los resultados de mano de obra barata en violaciones desenfrenadas de SRP y me golpea paredes de ladrillo gestión dinámica aplicación de reglas, por ejemplo. Luego, la infraestructura de CSLA padre/hijo propaga la validación de objetos compuestos, pero no siempre queremos las relaciones c/p , por lo que escribimos más validación y código de tienda. Entonces, hoy nuestra implementación de CSLA es inconsistente & confusa. Refactorizando a more-better CSLA tendrá profundos efectos de dominó. Entonces, después de esa , la inyección inicial CSLA es esencialmente abandonada.

final Editar

+17

Me gustaría poder votar esto 1000 veces. CSLA es de lejos el peor marco con el que he tenido el disgusto de trabajar. Probablemente funcionaría bien para programas distribuidos triviales. Pero como dijiste, el trabajo serio requiere herramientas que exponen el poder, no te limitan. Todo el asunto BusinessObject es realmente el peor. Obliga a cada clase BO a heredar ese único objeto abstracto. Y la forma en que lo hace (a través de los genéricos) es totalmente incompatible con su capacidad para heredar objetos comerciales. Realmente es un marco horrible. –

+2

Solo para otras personas que miran esta pregunta/respuesta, me parece que su frustración se debe al hecho de que su aplicación estaba tratando de persistir el objeto de negocio real en la base de datos que en mi opinión no debería hacer y en realidad es desalentada por CSLA. Si hubiera separado sus preocupaciones correctamente y persistiera en una capa separada (fábricas/repositorios donde asignaría el objeto comercial a una entidad de capa de datos y viceversa), habría tenido una vida mucho más fácil. –

+2

Estoy completamente de acuerdo con Cristian. Si sus objetos comerciales están construidos de una manera que requiere objetos raíz individuales referenciados por otros objetos raíz, usted está haciendo cosas inapropiadas. He tenido grandes árboles de objetos que se cargan desde una sola consulta en la base de datos, devolviendo múltiples conjuntos de resultados. Una herramienta Codegen común funcionaría mal. En nuestro caso, creé una DSL que nos permitió generar nuestros objetos comerciales desde múltiples tablas o procesos almacenados, junto con especificar qué tipo de objeto era y los permisos que tenía. Eso aceleró el desarrollo en aproximadamente un 300%. –

3

Sugiero la lectura de la página What is CSLA?, y navegar a través de la CSLA .NET FAQ site.

Para obtener la información más reciente, consulte Using CSLA 4 ebook series.

+0

CSLA .NET se mudó a GitHub hace un par de años - la página de inicio ahora es http://cslanet.com –

3

CSLA: basado en componentes escalable Arquitectura lógica

Un párrafo en pocas palabras que describen CSLA a mí desde el sitio estaba presente:

CSLA .NET le permite crear un negocio orientado a objetos capa que abstrae y encapsula su lógica de negocio y datos. El marco garantiza que sus objetos comerciales funcionen a la perfección con todas las tecnologías de interfaz .NET, incluidos WinRT XAML, WPF, ASP.NET MVC, ASP.NET Web Forms, WCF, servicios de asmx, Windows Phone 7, Silverlight, Windows Workflow y Windows Forms.

por las que podría utilizarlo: gestión de reglas de

negocios. Una vez que aprende el sistema de reglas de negocios, proporciona una forma de aplicar la lógica de negocios en un paquete ordenado. Si tiene un objeto con objetos secundarios que necesita informar Validación al nivel principal, existe una forma de manejarlo. (Consulte http://www.lhotka.net/weblog/CSLA4BusinessRulesSubsystem.aspx para obtener más información sobre el sistema de reglas)

¿Tiene objetos comerciales que necesita para apoyar deshacer N-nivel? Un CSLA BusinessBase tiene un sistema de administración de propiedades horneado (como propiedades de dependencia) para funcionalidades como N-Level Undo (en realidad está completamente implementado). (Esto también se relaciona con la administración de reglas comerciales. Puede disparar la validación cuando cambia una propiedad principal, o puede cambiar una propiedad en función del valor de otra propiedad.)

Gestión del portal de datos. Este fue un concepto interesante. Si necesito ejecutar operaciones de datos localmente, CSLA está configurado para esto de fábrica. También puedo poner de pie un servicio WCF que hace referencia a mis bibliotecas de objetos comerciales, y uso algunas líneas de configuración para hacer que un punto final WCF administre las operaciones de datos. El servicio WCF es parte del marco CSLA. Fue lindo ver esto en acción. Otros escenarios? ¡Por supuesto! La biblioteca de objetos de negocio no necesita cambiar, la clase de DataPortal determina si necesita ejecutarse de forma remota o local, de acuerdo con su configuración.

CSLA te obliga a utilizar algunos mecanismos que pueden no ser naturales al principio. Creo que esto es cierto para cualquier patrón que elijas implementar. Sin embargo, cuando se trata de los desafíos de implementar Arquitectura Orientada a Servicios, CSLA ofrece mucho. Sí, tendrá un desarrollador de nivel de arquitecto que esté creando algunas de sus bibliotecas. Sin embargo, si está creando una aplicación de clase empresarial, ¿no debería estar haciendo eso ya?

CSLA, cuando se ha diseñado correctamente, se puede probar. Usamos el patrón de repositorio para reemplazar el dal real con una capa simulada y probar tanto por especificación (usando NUnit/SpecFlow) como de forma unitaria cuando corresponde.

En lo que respecta al soporte, incluido el propio Rocky, existe una comunidad de colaboradores que garantiza que cosas como CSLA.Net for Xamarin se hagan realidad. Hay consultoras que conocen CSLA y las usan de forma regular según el alcance del trabajo (y no, no solo la consultoría para la que trabajo).)

Teniendo todo en cuenta, CSLA puede no ser para ti. Como otros han indicado, lea el sitio y los libros (especialmente los objetos comerciales Expert C# 2008). Haga preguntas, ya que la comunidad de CSLA tiende a brindar consejos de calidad.

+1

Casi me sentí mal por cambiar tu puntaje de un OVE amistoso 999 (a la hora de votar) a ese feo trasero 1009. – daniloquio

3

En respuesta a @radarbob https://stackoverflow.com/a/10922373/261363, espero no arrepentirme de esto y comenzar una guerra de llama.

Nuestro equipo ha estado desarrollando un par de aplicaciones LOB con CSLA. Desde mi experiencia en la escritura de aplicaciones de campo verde con CSLA y el mantenimiento del código existente aquí están mis respuestas a tus puntos.

  1. El BO no se supone que debe hacer su propia persistencia de datos, que tendrá una fábrica que se encargará de todos los persistencia de datos, por ejemplo usando un ORM para asignar a los modelos que se guardan más adelante.

  2. Lamento escuchar eso, me aseguro de estudiar la documentación del marco y escribir al menos una aplicación de juguete antes de comprometerme con una base de datos de códigos existente. Además, puedes descargar y explorar el código CSLA.

  3. Tiene BO -> Portal -> Fábricas que no deberían ser muy complicadas. Los ejemplos de CSLA existentes son muy útiles para explicar lo que sucede en cada nivel.

  4. CLSA no debe confundirse con un ORM

  5. Como usted debe, objeto de negocio rara vez se asignó a una mesa y por lo tanto requiere un poco de trabajo al guardar. En el caso de que estén mapeados en una tabla, use algo como AutoMapper para asignar su BO a su POCO en 1 línea.

  6. Mire en los Comandos de CSLA, tampoco es nada que le impida mantener su BO lo más pequeña o grande que desee, siempre y cuando tenga en cuenta que no son los mismos que los POCO que persistirá.

En un proyecto que trabajamos en donde pudimos probar fácilmente BO para garantizar que la lógica comercial fuera correcta. Debido a la buena separación de las preocupaciones, probamos nuestras fábricas en forma aislada para asegurarnos de que los objetos comerciales persistan en consecuencia.

Hubo un momento en que pude mantener fácilmente parte de mi BO en MongoDB para que la aplicación se ejecutara en una base de datos híbrida MSSQL y MongoDB sin tener que cambiar siquiera una línea de código en mis objetos comerciales, todo lo que tenía que hacer era actualizar las fábricas para usar Mongo en lugar del ORM actual.

Esperanza esta se dirige a todos los puntos de una manera justa,

Saludos

Cuestiones relacionadas