dotnetcore / SmartCode

SmartCode = IDataSource -> IBuildTask -> IOutput => Build Everything!!!
Apache License 2.0
572 stars 163 forks source link

TypeScript 类型系统 #31

Closed beginor closed 5 years ago

beginor commented 5 years ago

请问现在 SmartCode 支持 TypeScript 的类型系统么? 打算 SmartCode 做一套基于 Angular 的增删查改的模板, 如果有的话就可以直接使用了。

ElderJames commented 5 years ago

还没有,还是在typescript的模板里使用吧!感谢贡献。最好能使用ng-zorro+asp.net core的项目,就是官方的dotnet new angular模板

Ahoo-Wang commented 5 years ago

@ElderJames 不是写好Razor模板然后运行SmartCode就好了么,是不是我对问题的理解有问题?

beginor commented 5 years ago

@ElderJames @Ahoo-Wang 这个贡献一个 pr 倒是不难, 问题是我已经 fork 一个 库 了,模板中引用了私有的类库, 不能提交 pr 。 貌似 github 只能 fork 一个库, 这个该怎么解决呢?

ElderJames commented 5 years ago

@Ahoo-Wang 我觉得用razor做模板还是不太好,能不能参考dotnet模板,模板项目自身可以运行,在配置文件里配置需要替换的符号。

官方搜集的模板 https://github.com/dotnet/templating/wiki/Available-templates-for-dotnet-new

Ahoo-Wang commented 5 years ago

@ElderJames ok,我抽空看一下这种实现方式。对于 @beginor 的问题你有什么建议。 我本来计划想设计一个 SmartCode 模板市场类的东西,类似于 hub.docker.com ,大佬们 有什么建议。 比如 @beginor 提到的私有模板,如何提交,公共化的模板应该如何提交,以及官方模板提交的规范于标准 这些都需要讨论制定。

beginor commented 5 years ago

@ElderJames 那个只是一个初始化项目的模板吧, 和 smartcode 要做的从数据库生成代码的模板区别比较大的。

ElderJames commented 5 years ago

@Ahoo-Wang @beginor 我觉得不能提交pr了,只能用链接来关联模板项目的地址

我本来计划想设计一个 SmartCode 模板市场类的东西,类似于 hub.docker.com ,大佬们 有什么建议。

用dotnet gobal tools下载模板,命令行生成吧?

创建模板项目: smart new template -type dbfirst -name angular

上传模板: smart publish -key xxx

安装: smart new -i "Angular"

生成: smart new angular -db "server=localhost;database=MyDb;"

ElderJames commented 5 years ago

@ElderJames 那个只是一个初始化项目的模板吧, 和 smartcode 要做的从数据库生成代码的模板区别比较大的。

@beginor 数据源的问题,dotnet new 的数据源在cli参数,我们做成从数据库获取数据源的就行

beginor commented 5 years ago

不错,这个想法好。希望早日实现 👍不过貌似已经偏离话题了。

模板库的问题, 用 git submodule 的方式是否可行呢?

ElderJames commented 5 years ago

fork的库改个名吧,一般fork的都是提pr用的。 模板库应该独立存在,不在项目中维护了~

beginor commented 5 years ago

改名是不行的, 还是提示已经 fork 过了。

我找到的方法是从历史记录中新建一个分支, 然后再合并 smartcode 的更新进来, 这样就在我的库中得到一个只包含 smartcode 的分支, 不包括我的修改, 用这个分支来提交 pr 是可以的。 以后我再慢慢整理, 把我的模板库移动到一个独立的分支或者库。

beginor commented 5 years ago

@Ahoo-Wang 遇到了一点儿小问题, 请教一下。 我们的数据表名称遵循蛇形下划线规范, 比如 app_attachmentsapp_users 。 对应生成的 TypeScript 接口类型如下:

// Create By Beginor
// Date 2019-06-05 06:51
// Code Generated By SmartCode
// Code Generater Github : https://github.com/dotnetcore/SmartCode

/** interface for 附件表 */
export interface AppAttachment {
    /** 附件ID */
    id: number;
    /** 内容类型(HTTP Content Type) */
    contentType: string;
    /** 附件内容 */
    content: number[];
    /** 创建时间 */
    createdAt: string;
    /** 创建附件的用户ID */
    creatorId: string;
    /** 文件名 */
    fileName: string;
    /** 附件大小 */
    length: number;
    /** 附件所属的业务ID,可以是任意表的ID,如果业务表有附件, 则需要根据业务表记录的ID,删除对应的附件。 */
    businessId: number;
}

根据前端 Angular 的命名规范, 应该保存为 app-attachment.ts 。 这样表名称、接口(类)名与文件名各不相同, 这里和 C# 的规范不一致了, 因为 C# 的类名和文件名使用的相同的名称。

请问这种情况该怎么配置呢? 能否为文件名再单独配置一个转换器或者转换函数呢?

ElderJames commented 5 years ago

Angular里不是attachment.model.ts这样的文件命名吗? 组合词会用-连接,如home-header.model.ts

beginor commented 5 years ago

是的,我只是举例说明而已,请问有办法解决么? 建议参考下 angular 的 pipe 机制, 将转换器配置成管道,可以多个串联在一起

ElderJames commented 5 years ago

扩展IWordsConverter接口应该可以满足你的需求

Ahoo-Wang commented 5 years ago

@beginor 该问题下个小版本迭代开始支持,有什么好的建议也可以提交给我。下次有问题另外开个issue吧,这个issue已经偏离了主题好远了。😂

beginor commented 5 years ago

OK,我先写 converter 吧实现吧,也就是几行代码的事儿