코드 생성기, 생각해봐

2742 단어 코드 생성
웹 서버 쪽이 3층에 의해 죽어서 하루 종일 이리저리 옮겨다니며 똑같은 코드를 썼는데 언제쯤 간단해질 수 있을까.
옛날에 코드스미스가 있었던 날은 조화롭고 행복했어요. 데이터 원본을 골라서 실행을 시키면 브러쉬 코드가 나와서 시원했어요.
codesmith 지원.net, c# 문법으로 cs 파일을 내보낼 수 있습니다. 언제 자바 파일을 내보낼 수 있겠습니까? 하지만 드디어 txt 파일을 내보낼 수 있어서 보완할 수 있습니다.
무엇보다 크랙을 기다려야 하는데...
 
회사의 무료한 밀크티 프로젝트가 끝난 후부터 아직 아무것도 쓰지 않았다. 허위사실을 꾸미고 싶지 않다. 무슨 웹 사이트, 무슨 블로그, 너무 아득하고 인터넷이 한꺼번에 가득하다.
코드 생성기를 쓰는 것이 실용적이다.
그래서 자료를 수집하고freemaker의 코드를 보았는데 나는 NPE에게 깊이 패했다. 변수를 초기화하지 않으면 로그가 바로 터진다.
아니면 내가 비교적 익숙한velocity로 돌아가서 다음 원본을 봤는데 가장 먼저 생각한 것은template를 삽입점으로 하는 것이다. 만약template가 절대 경로를 직접 찾을 수 있다면 많은 파일 읽기 방식을 고려할 필요가 없다.
코드를 보았습니다.
 
protected Resource loadResource(String resourceName, int resourceType, String encoding)

        throws ResourceNotFoundException,

            ParseErrorException,

            Exception

    {

        Resource resource = createResource(resourceName, resourceType);

        resource.setRuntimeServices(rsvc);

        resource.setName(resourceName);

        resource.setEncoding(encoding);



    //…………



        for (Iterator it = resourceLoaders.iterator(); it.hasNext();)

        {

           //…………



            try

            {



                if (resource.process())

                {

                    //………………

                }

            }

            catch (ResourceNotFoundException rnfe)

            {

                /*

                 *  that's ok - it's possible to fail in

                 *  multi-loader environment

                 */

            }

        }

  //…………



        return resource;

    }


가장 중요한 건 이 문장에서.
 
resource.process()


 
template에 들어가는 코드 추적
 
   try

        {

            is = resourceLoader.getResourceStream(name);

        }


velocity의 ResourceLoader는 여러 가지 파일 읽기 방식을 지원합니다. 구체적인 것은 제가 예전에 쓴 글을 보십시오.
기본 FileResourceLoader입니다. 절대 경로의 읽기가 지원되지 않습니다.나는 매우 게으르다. 그래서 나는 ResourceLoader를 다시 쓰기가 귀찮다.
 
만약 삽입점을template에 놓을 수 없다면, 템플릿을 문자열로 직접 대체할 수 있는 다른 방법이 있을 것 같습니다.
가장 간단한 것은 다음과 같습니다.
 
        String s = "  We are using $project $name to render this.";

        w = new StringWriter();

        Velocity.evaluate( context, w, "mystring", s );


그러나string으로는 불가능하므로 흐름을 직접 조종해서 해석하는 것이 좋다.
나중에 evaluate에 다시 불러오는 함수가 있는 것을 발견했는데 바이트 흐름을 직접 처리할 수 있고 상당한nice를 입구에서 찾았다.많은 시간을 절약했다.
 
public static boolean evaluate( Context context, Writer writer,

                                    String logTag, InputStream instream ){

//…………

}


이것만 있으면 코드 생성기를 실현하는 것은 어렵지 않다.
 
 
 
 

좋은 웹페이지 즐겨찾기