estratégias de design para bibliotecas de classes que abrangem Javascript e C #
-
06-09-2019 - |
Pergunta
Estou implementando alguns objetos que irá ter sobre uma quantidade igual de riqueza em ambos os lados do lado do cliente e servidor.
Neste caso particular, eu vou ser a construção de um (espero) pouco biblioteca de classes para lidar com tokens de busca. Assim como um exemplo pseudo-código, eu vou querer ser capaz de fazer o equivalente ao seguinte no JavaScript e no servidor (C # no meu caso).
s = new SearchTokenList();
s.Add(new SearchToken(field, value, negation));
Que estratégias de design vai ajudar a evitar a criação de uma grande bola de lama para uma biblioteca que deve abranger C # e JavaScript?
Update: À procura de mais de estratégias do que mecânica. Mas eu vou tomar qualquer orientação que pode começar a partir aqueles que têm feito previamente coisas semelhantes.
Solução
Dê uma olhada Script # por Nikhil Kothari, pode ajudá-lo. É um C # para o compilador JavaScript.
Outras dicas
Eu acho que você deve verificar se o meu C # para o compilador JavaScript para fora em http://jsc.sourceforge.net/
Ao contrário Script # meu compilador jsc funciona em nível MSIL.
WPF Exemplo: AvalonExampleGallery
Contacte-me se você tiver quaisquer perguntas específicas.
Se o desempenho não é crítico, você poderia carregar os dados em JSON ou XML e passá-lo de volta para o lado do servidor e fazer o processamento. Eu acho WCF pode gerar interface JavaScript fora da caixa. Consulte .NET Exemplo: chamar um serviço WCF do Javascript .
Você deve ser capaz de executar algum código Javascript no seu servidor .NET usando JScript.NET - compilá-lo com /target:library
e ter certeza que é compatível com CLS e que você declarar esse fato com
[assembly:System.CLSCompliant(true)]
ou outras variantes do CLS declarações de conformidade . Uma vez que você chegou ao trabalho, você pode executar (um pouco de) código JS no servidor (chamá-lo de C #) eo cliente (chamá-lo de outra JS) e mais facilmente garantir a igualdade de funcionalidade em ambos os lados.