c# - medidor - Aplicaciones de la línea de negocios: ¿F#hará mi vida más fácil?
medir hashtag instagram (5)
@Juliet y @kvb tienen buenas respuestas, solo quiero reiterar lo útil que es F # para facilitar el enhebrado. En mi blog " Un panel RSS en F #, parte seis (poniéndolo todo junto con una GUI de WPF) ", digo
... Tenga en cuenta el uso ingenioso de ''async'' aquí - Yo uso Async.StartImmediate, lo que significa que todo el código se ejecuta en el subproceso de la interfaz de usuario (donde se inicia el controlador Click), pero todavía puedo hacer sleeps no bloqueantes que no atascar la interfaz de usuario. Esta es una de las formas en que F # async acaba de volar las puertas de todo lo demás.
...
Nuestra información de "ago" ("hace 3 minutos") se agota rápidamente si no la actualizamos, por lo que iniciamos un ciclo que se vuelve a dibujar cada minuto. Una vez más, F # async patea el trasero, ya que puedo escribir esto como si fuera un bucle síncrono ejecutándose en el hilo de UI, pero la llamada de espera sin bloqueo garantiza que la UI permanezca activa. Increíble. ...
pero esa publicación en el blog es un ejemplo del uso de F # para codificar a mano toda la interfaz de usuario. Eso implica deshacerse de todas las excelentes herramientas de GUI que obtienes con C # o VB. Imagino que un enfoque híbrido puede potencialmente generar casi todos los beneficios de ambos (con el costo de tener dos proyectos en la solución donde tu anterior solo tenía uno), pero aún no tengo experiencia directa en compartir aquí.
(¿Existe un "ejemplo de problema" canónico de una aplicación GUI de C # donde necesita agregar subprocesos para mejorar el rendimiento o mantener la aplicación en vivo durante una operación larga? De ser así, debería verificarlo).
Desarrollo principalmente aplicaciones de línea de negocio. Sin operaciones científicas. Sin cálculos complejos. Solo ata la interfaz de usuario a la base de datos. La única razón por la que utilizo el enhebrado es para hacer un poco de trabajo en segundo plano y aún así mantener la UI respondiendo.
Este puede no ser el mejor enfoque, pero esto es lo que sigo
1. Cree primero una aplicación que funcione (sin hilos) y entréguesela al usuario final para que la lea.
2.Una vez que todos los requisitos están bloqueados, trato de usar subprocesos donde sea que tenga sentido para mejorar el rendimiento.
El código para los pasos 1 y 2 es abrumadoramente diferente y el código de enhebrado domina el código real.
1. Will F # me facilitará la vida en el caso de las aplicaciones de la línea de negocio?
2. ¿Hay alguna tecnología de IU particular que se ajuste mejor a F #? Principalmente trabajo en ASP.NET y Silverlight. WPF ahora y entonces.
3. ¿Hay algún buen ejemplo de aplicaciones / demostraciones de línea de negocio con F #?
No estoy preguntando si es posible desarrollar la aplicación Línea de negocios en F #. Me pregunto si F # facilitará mi vida al desarrollar aplicaciones de línea de negocios en comparación con C #. Mi principal preocupación será el enhebrado y la sincronización de IU.
Algo que te gustaría ver:
La primera aplicación sustancial de línea de negocios en F #
Una gran aplicación LOB en F #.
Esa es una pregunta muy difícil de responder: creo que F # haría que algunos aspectos de tu vida sean mucho más fáciles y algunos más difíciles.
En el lado positivo, lidiar con el enhebrado debería ser relativamente sencillo: los flujos de trabajo asincrónicos F # son un gran beneficio. Además, F # Interactive hace que sea muy fácil iterar y explorar código rápidamente. Para mí, esto es una gran ventaja sobre C #, ya que puedo probar cambios menores en el código sin pasar por una compilación completa.
En el lado negativo, la herramienta para F # no está donde está C #, lo que significa que no tendrá acceso a constructores de GUI, herramientas de refactorización, etc. Es difícil decir qué tan grande de una productividad golpeó esto causaría sin saber más acerca de su escenario. Una solución alternativa sería crear una solución multilingüe que tenga un front-end C # delgado, pero de nuevo la complejidad puede no valer la pena.
Estoy en el mismo barco que tú, haciendo muchas aplicaciones tipo línea de negocio, nada "divertido" como juegos o compiladores o motores de búsqueda.
Su kilometraje variará, pero al menos en mi propia experiencia, muchos equipos de desarrollo son reacios a entrar directamente en F # porque nadie más en el equipo lo sabe o incluso lo ha escuchado. Y de inmediato, tienes que luchar contra esas preguntas como "¿qué hace diferente de C #?" Si puede convencer a su jefe para que le permita escribir algunas aplicaciones de demostración, ¡adelante!
Entonces, dicho esto, me parece que C # no es muy bueno en las reglas comerciales, pero maneja las GUI como un campeón; La inmutabilidad de F # hace que el desarrollo de la GUI resulte incómodo, pero las reglas de negocio y los flujos de trabajo se sienten naturales. Entonces los dos lenguajes tienen sus propias fortalezas y complementan las debilidades de los demás.
En mis propias aplicaciones LOB, F # ejecuta círculos alrededor de C # en algunas áreas:
Los flujos de trabajo asincrónicos y los procesadores de buzones de F # son más fáciles de usar que los hilos nativos e incluso la biblioteca paralela de tareas. Desde que utilicé los procesadores de buzones para la comunicación entre hilos, ni siquiera recuerdo la última vez que tuve que bloquear o enhebrar cualquier cosa para la sincronización.
Definición de motores de reglas de negocio y DSL con sindicatos FTW! Cada aplicación LOB no trivial en la que he trabajado tiene su propio lenguaje e intérprete a medias, y casi siempre se basa en activar recursivamente una enumeración para profundizar en las reglas y encontrar una coincidencia. El proyecto actual que ahora tengo contiene 1300+ clases públicas, 900 o más son clases simples de contenedor para representar una regla. Creo que representar las reglas como una unión F # reduciría sustancialmente la inflamación del código y haría un mejor motor.
El código inmutable simplemente funciona mejor : si obtienes un objeto nuevo con un estado no válido, no tienes que buscar mucho para encontrar la línea ofensiva del código, todo lo que necesitas saber está en la pila de llamadas. Si tiene un objeto mutable con un estado no válido, a veces debe dedicar mucho tiempo a rastrearlo. Puedes escribir código inmutable en C #, pero es realmente difícil no recurrir a la mutabilidad, especialmente cuando estás modificando un objeto en un bucle.
Odio los nulos. No puedo dar una estimación exacta, pero parece que la mitad de los errores que obtenemos en la producción son excepciones de referencia nula: un objeto se inicializa incorrectamente y usted no lo sabe hasta que tenga 30 cuadros de profundidad en el código. Creo que F # nos ayudaría a escribir más código libre de errores la primera vez.
C # generalmente funciona bien cuando:
Está escribiendo un código GUI o trabajando con sistemas inherentemente modificables.
Exponer un DLL o servicio web a muchos clientes diferentes.
Tu jefe no te dejará usar las herramientas que quieras;)
Entonces, si puede superar el "por qué querríamos utilizar un nuevo obstáculo lingüístico", creo que F # le facilitará la vida.
Para abordar esto, publiqué algunos pensamientos míos al usar F #,
http://fadsworld.wordpress.com/2011/04/13/f-in-the-enterprise-i/ http://fadsworld.wordpress.com/2011/04/17/fin-the-enterprise-ii- 2 /
También estoy planeando hacer un video tutorial para terminar la serie y mostrar cómo F # puede contribuir en la programación de UX.
Solo estoy hablando en contexto de F # aquí.
-Fahad