从学CodeSmith谈程序员学习方法

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

借此来谈一下程序员的学习方法。固然这是个人一家之言。若有雷同,不胜荣幸。ide

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

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

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

这也是我作了几个项目总结出来的方法,别的很少说了,省得文章冗繁,各位看官不爱看了。.net

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

 

<%@ 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
相关文章
相关标签/搜索