2009-02-25 3 views
5

Actualmente estoy usando ASP.NT MVC RC1 para implementar una aplicación básica de hojas de tiempo. Me gustaría seguir los principios DRY pero encontrarlo difícil en un caso particular:¿Cómo mantenerse SECO cuando la lógica necesita una implementación de C# y Javascript?

Una de mis vistas, una vista parcial en realidad, tiene una cantidad de cuadros de texto que representan el número de horas dedicadas a una tarea en particular, una cuadro de texto por día de la semana. Cuando inicialmente cargo la página, quiero un cuadro de texto en la vista para mostrar el total de todas esas horas. Además, quiero que ese total se actualice a medida que cambio los valores en los cuadros de texto. La actualización de los cuadros de texto no causa una devolución de datos completa, solo una devolución de datos de AJAX que no hace nada con los resultados (la devolución de datos actualiza el valor en el DB pero el retorno de resultado de acción es un resultado vacío ya que no hay nada que necesite actualizar en el UI).

Actualmente tengo el controlador crea una vista que se completa con el "total" para esa vista, por lo que la lógica que agrega todos los valores está en el controlador C#. En el lado de la interfaz de usuario, tengo javascript que actualiza el total en el nivel de UI. Pero esto no es bueno porque si cambio la lógica detrás de cómo se calcula ese total, ¡tengo que cambiarlo en dos lugares! AHH! ¡NO ESTA SECO!

Entonces, ¿cómo puedo hacer esto? La única respuesta que me llega hasta ahora es eliminar el código de javascript que calcula el total en la interfaz de usuario y en su lugar hacer que la devolución de datos de AJAX devuelva el nuevo "total" para esa vista.

¿Hay otros enfoques?

Respuesta

1

Tener la lógica para sumar el tiempo en C# y Javascript no es SECO en el sentido más estricto, eso es cierto. Uno podría dividirse el hecho de que son dos idiomas diferentes que operan en dos ambientes separados, pero al final del día, si cambia uno, tiene que cambiar ambos.

Creo que es una compensación entre la forma y la función. ¿Qué tan importante es tener el javascript? Si la llamada AJAX es demasiado lenta (una posibilidad real), entonces puede ser el momento de darse cuenta de que el principio DRY es un principio rector, no una ley.

+2

It * is * es un principio rector, no una ley. Si necesita la lógica en ambos lugares, y no es técnicamente factible compartir la misma implementación, tendrá que implementarla dos veces. Mala suerte, así es la vida. ;) – jalf

+0

@jalf: exactamente. Una (cualquier) directriz no es una ley irrompible de la existencia. – Richard

+0

OK, observado y modificado;) –

0

Si desea que el código se ejecute en ambos, su servidor y el cliente, puede usar/escribir un árbol de expresiones para el compilador de JavaScript.

En el lado del servidor, evalúa la expresión y envía la misma expresión traducida a JavaScript para el cliente.

+0

¿Está sugiriendo usar un traductor C# -> Javascript para crear el lado del cliente javascript? ¿O tal vez quiere usar JavaScript tanto del lado del servidor como del lado del cliente? –

+0

No, creo que quiso decir que tiene una "expresión" que puede ejecutarse tanto con C# como con Javascript –

+0

Sí y no. Los árboles de expresiones son representaciones en memoria de un subconjunto de expresiones C#/VB.NET. Se pueden evaluar fácilmente en el servidor. Sin embargo, tendría que escribir un componente que traduzca dichos árboles de expresión a JavaScript. –

3

Puede probar Nikhil Kothari's Script# project. Es un compilador cruzado que compila y traduce desde C# a javascript independiente del navegador, que le permite compartir la lógica. Es utilizado por muchos grupos dentro de Microsoft para exactamente ese propósito.

Más, desde el sitio web:

escritura # trae a la productividad y el desarrollo Ajax JavaScript. Script # es una herramienta gratuita que permite a los desarrolladores crear el código fuente de C# y compilarlo posteriormente en una secuencia de comandos normal que funciona en todos los navegadores modernos, y al hacerlo, aprovechar la productividad y de las herramientas .NET existentes, así como el IDE de Visual Studio. La secuencia de comandos # le da poder con una metodología de desarrollo y enfoque que brinda ingeniería de software, mantenimiento a largo plazo y enfoques de desarrollo escalables para sus aplicaciones Ajax, componentes y marcos .

escritura # es ampliamente utilizado por los desarrolladores de Microsoft dentro del edificio experiencias Ajax en Windows Live, Oficina para nombrar sólo un par, como así como por una desarrolladores externos y empresas como Facebook. Si está compilando aplicaciones RIA basadas en Ajax, se lo debe a usted mismo al probar Script # hoy y ver si puede ayudar a mejorar su propio desarrollo Ajax .

Cuestiones relacionadas