2008 – Silverlight (C#和XAML)
<UserControl x:Class="SilverlightApplication1.MainPage"> <Grid x:Name="LayoutRoot" Background="White"> <TextBlock x:Name="Greeting"></TextBlock> </Grid> </UserControl> public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); Loaded += MainPage_Loaded; } void MainPage_Loaded(object sender, RoutedEventArgs e) { Greeting.Text = "Hello, World."; } }
当然,Silverlight后来就象一只垃圾股一样日薄西山了。那时Silverlight仍然是一个非常有用也很有竞争力的技术,I但一旦人们发现微 软不再对这种技术进行投入了,Silverlight马上就行将就木了 —— 虽然人们感觉它过时了,但这和它在那时是不是一个正确的工具没有丝毫的关系。HTML5在宣传自己是“编写一次,到处运行”方面也做得相当不错, 成百上千的公司在能够意识到他们的错误(HTML5的口红“编写一次,到处运行”的实际意思是,“编写一次,到处碰壁,然后为每个平台还得再编写一次”) 之前,不顾一切、争先恐后地加入了HTML5的阵营。
然而,我们所喜欢的Silverlight中的那部分特性在Windows 8.1下的XAML和C#中存活了下来。 为了好玩,下面给出采用酷小子们惯常使用的模型-视图-视图模型(MVVM)模式编写的“Hello, World”。 2011 – WinRT / C#
public class ViewModel { public string Greeting { get { return "Hello, World"; } } } <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid.DataContext> <local:ViewModel/> </Grid.DataContext> <TextBlock Text="{Binding Greeting}"/> </Grid>
虽然Windows 8.1已经让我忙于写作和兼职项目有一段时间了,但是对于大部分公司来讲,它还是比较新的,很多公司想要的是基于Web的解决方案。这就意味着要使用 HTML和JavaScript,而我在大部分时间中就是忙于这方面的工作。没错,一旦我发现我离开了这套技术,它们总是能够又把我拉回来。在对我用 HTML和JavaScript进行Web开发时所痛恨的地方进行一番深思熟虑之后,我觉得其中必有更好的方式来实现它们。我们的团队拧成一股绳,对各种 可能的解决方案进行了调查研究,最好找到了一个非常酷的解决方案。最近有一种新发布的语言,叫做TypeScript,它是JavaScript的一个超 集。它没有试图要改变语法,因此所有有效的JavaScript代码同样也是有效的TypeScript代码。然而,这个语言提供了一些开发时特性,比 如,有助于形成API调用的接口,丰富的发现机制(它们甚至都不会出现在编译所产生的代码中)以及支持继承的类、强类型变量、静态修饰符等,而所有这些最 终都会编译成非常有效的、跨浏览器的JavaScript代码。
采用TypeScript是个轻松的决定。尽管它还处于beta测试阶段,但它产生的代码100%可以直接用在产品中,所以如果我们发现它产生的代码有什
么问题的话,我们完全可以跳过TypeScript,直接在JavaScript中进行修补。最后证明,TypeScript可用性相当高 ——
我们的团队中有几个人对JavaScript有纯正癖,痛恨对“修改JavaScript这种语言”的所有企图都恨之入骨,即使他们几个人刚开始持有怀疑
的态度,最后也一致认为,TypeScript为我们提供了更高一层的控制力度,用它还能够进行重构,它也支持并行开发,对我们能够发布高质量的基于
Web的代码有着极大的促进作用。 2012 – TypeScript
class Greeter { public static greeting: string = "Hello, World"; public setGreeting(element: HTMLElement): void { element.innerText = Greeter.greeting; } } var greeter: Greeter = new Greeter(); var div: HTMLElement = document.createElement("div"); greeter.setGreeting(div); document.body.appendChild(div);
TypeScript不是我所在的唯一的改变。我们还想消除在为对象设置数据绑定时的繁文琐节。当时我们所采用的Knockout也是一个非常不错的框
架,但它所需要的工作还是比我们所想的要多。我们团队中诱人对一些替代方案进行了调查研究,最后选定了AngularJS。刚开始我对它还是有所怀疑的,
但很快发现,这个方案真的同用于Web的XAML方案非常类似。采用它我们可以在使用声明式UI的情况下,还能解决另外一个问题,就是我们还可以将命令逻
辑从中隔离出来。到现在为止已经有几个月了,我们的团队在使用TypeScript和AngularJS这些相关技术时一直都很愉快,并且相当的爱用这套
技术。 我现在正在参加WintellectNOW的一个课程,因为我决定这事关重大。然而,要说30年的经验教会了我什么的话,那就是:今天还存在,明
天就消失。我不是一个C#开发人员,也不是一个JavaScript开发者,更不是一个AngularJS奇才。绝不是!我只是一个编程人员,一个程序
员,纯正的、朴素的、简单的程序员。各种编程语言只不过是个工具,我只是碰巧学会了很多编程语言而已。好吧,再来一次 “Hello,
World”。我希望你能喜欢这段旅程。。。一段直到现在的旅程。 2013 – AngularJS
<div ng-app>
<div ng-init="greeting = 'Hello, World'">
{{greeting}}
</div>
</div>
“再见了,读者朋友。” |