从学CodeSmith谈程序员学习方法

一直觉得CodeSmith是个好东西,最近正好有点时间来研究下,其实以前也想学习怎么用,在博客园搜一下有很多介绍CodeSmith的文章,我就收藏过一个写得很详细的http://terrylee.cnblogs.com/archive/2005/12/28/306254.aspx,一看里面文章这么多,一篇一篇去学,瞬间觉得很难有木有?于是就放弃了,想着以后有时间再慢慢看,久而久之就忘了,后来想起来又打开这个收藏,发现还是不想看,又放弃了。放在收藏里的东西并不是自己的东西,只有真正自己学过的才是自己的东西。

借此来谈一下程序员的学习方法。当然这是我的一家之言。如有雷同,不胜荣幸。

想学一个新的技术,最好的方法莫过于看官方文档,外加官方的例子。

就拿CodeSmith来说,装完软件后,从开始菜单打开第一个选项就是文档。地址:https://codesmith.atlassian.net/wiki/display/Generator/Welcome+to+CodeSmith+Generator

前面的介绍神马的就不用看了,从Introduction and Tutorials-->Tutorials-->Getting Started 开始一页一页往下看,每页的内容都很短,关键地方还有图片,比起别人写的长篇文章来说好懂多了(并非别人写的文章不好,相反他写得很好,只是我一看满屏的文字就眼晕)。跟着文档学,很容易就明白了是怎么回事,这就是学习的技巧。特别是国外的开源项目,一般都会提供文档,有些会提供实例下载,如同我的上一篇文章微软企业库就提供了例子。

这也是我做了几个项目总结出来的方法,别的不多说了,免得文章冗繁,各位看官不爱看了。

顺便附上一段代码,因为CodeSmith官方文档在这一篇用的是VB,我改成了C#的

 

从学CodeSmith谈程序员学习方法
<%@ Template Language="C#" TargetLanguage="Text" Debug="False" %>

<%@ Property Name="InitialState" Type="StateEnum" Category="Options" Default="STARTED" Description="" %>

<%@ Property Name="Authentication" Type="AuthenticationEnum" Category="Options" Default="INTEGRATED" Description="Authentication method." %>

<%@ Property Name="Port" Type="PortsEnum" Category="Options" Default="CLEAR" Description="Port to use." %>

<script runat="template">

    public enum StateEnum

    {

        STARTED,

        STOPPED,

        DISABLED

    }

    public enum AuthenticationEnum

    {

        BASIC,

        DIGEST,

        NTLM,

        KERBEROS,

        INTEGRATED

    }

    public enum PortsEnum

    {

        CLEAR,

        SSL

    }

    public string GetState(StateEnum state)

        {

            switch (state)

            {

                case StateEnum.STARTED:

                    return "STARTED";

                case StateEnum.STOPPED:

                    return "STOPED";

                case StateEnum.DISABLED:

                    return "DISABLED";

                default:

                    return "STARTED";

            }

        }

        

    public string GetAuthentication(AuthenticationEnum state)

        {

            switch (state)

            {

                case AuthenticationEnum.BASIC:

                    return "BASIC";

                case AuthenticationEnum.DIGEST:

                    return "DIGEST";

                case AuthenticationEnum.NTLM:

                    return "NTLM";

                case AuthenticationEnum.KERBEROS:

                    return "KERBEROS";

                case AuthenticationEnum.INTEGRATED:

                    return "INTEGRATED";

                default:

                    return "BASIC";

            }

        }

        

    public string GetPort(PortsEnum state)

        {

            switch (state)

            {

                case PortsEnum.CLEAR:

                    return "CLEAR";

                case PortsEnum.SSL:

                    return "SSL";

                default:

                    return "CLEAR";

            }

        }

</script>





CREATE PROC dbo.PersonAddressTypeProc

AS

    SELECT

        AddressTypeID,

        Name,

        rowguid,

        ModifiedDate

    FROM

    Person.AddressType

GO

CREATE ENDPOINT GetAddressType

    STATE = <%=GetState(InitialState) %>

AS HTTP

(

    PATH = '/AddressType',

    AUTHENTICATION = (<%=GetAuthentication(Authentication) %>),

    PORTS = (<%=GetPort(Port) %>),

    SITE = 'localhost'

)

FOR SOAP

(

    WEBMETHOD 'AddressTypeList'

        (NAME='AdventureWorks.dbo.PersonAddressTypeProc'),

    BATCHES = DISABLED,

    WSDL = DEFAULT,

    DATABASE = 'AdventureWorks',

    NAMESPACE = 'http://AdventureWorks/AddressType'

)

GO
View Code

 

 

 

 

你可能感兴趣的:(code)