Cha*_*ndu 12 architecture go restful-architecture
我想使用GO和MongoDB构建一个基于API的应用程序.我来自Asp.net MVC背景.可能如果我使用MVC Web应用程序构建一个需要考虑的东西
关注点分离(SoC)
Dependeny注射与工作的统一
以下架构可以解决我在基于MVC的应用程序中的需求
Web上有资源来构建基于Asp.Net或Java的应用程序,但我还没有找到Golang应用程序架构的解决方案.
是GO与C#或Java不同,但仍然有Structs,Interfaces来创建可重用的代码和通用的应用程序架构.考虑以上几点,我们如何在GO应用程序中创建一个干净且可重用的项目结构,以及如何在DB(Mongodb)事务中创建一个通用的存储库.任何网络资源也是一个很好的起点.
Ced*_*ndo 11
这取决于你自己的风格和规则,在我的公司,我们以这种方式开发我们的项目:
company/envs/project.sh必须在服务之前评估的文件(在图像中的项目之外).zscripts包含所有额外脚本的文件夹,例如添加用户或发布帖子.仅用于调试建议.project/models./dogs将转到package project/apps/dogs和/catsto project/apps/cats.project/manager.project/static/[app/].有时需要具有可选[app/]文件夹,但只有当两个应用程序具有仪表板或冲突的文件名时才会发生.大多数情况下,您不需要使用[app/]静态资源.经理
我们称一个管理器,一个包含纯函数的包,可以帮助应用程序执行其任务,例如数据库,缓存,S3存储等.我们package.Startup()在开始监听之前初始化每个管理器调用,并package.Finalize()在程序中断时完成调用.
经理的一个例子可能是project/cache/cache.go:
type Config struct {
RedisURL string `envconfig:"redis_url"`
}
var config Config
var client *redis.Client
func Startup(c Config) error {
config = c
client, err := redis.Dial(c.RedisURL)
return err
}
func Set(k,v string) error {
return client.Set(k, v)
}
Run Code Online (Sandbox Code Playgroud)
在main.go(或your_thing_test.go)中:
var spec cache.Config
envconfig.Process("project", &spec)
cache.Startup(spec)
Run Code Online (Sandbox Code Playgroud)
在应用程序(或模块)中:
func SetCacheHandler(_ http.ResponseWriter, _ *http.Request){
cache.Set("this", "rocks")
}
Run Code Online (Sandbox Code Playgroud)
模块
模块是与其他模块隔离的视图和控制器的容器,使用我们的配置,我建议不要在模块之间创建依赖关系.模块也称为应用程序.
每个模块使用路由器,子路由器或框架提供的路由配置其路由,例如(文件project/apps/dogs/configure.go):
func Configure(e *echo.Echo) {
e.Get("/dogs", List)
}
Run Code Online (Sandbox Code Playgroud)
然后,所有处理程序都存在于project/apps/dogs/handlers.go:
// List outputs a dog list of all stored specimen.
func List(c *echo.Context) error {
// Note the use of models.Xyz
var res := make([]models.Dog, 0) // A little trick to not return nil.
err := store.FindAll("dogs", nil, &res) // Call manager to find all dogs.
// handle error ...
return c.JSON(200, res) // Output the dogs.
}
Run Code Online (Sandbox Code Playgroud)
最后,您在main(或测试)中配置应用程序:
e := echo.New()
dogs.Configure(e)
// more apps
e.Run(":8080")
Run Code Online (Sandbox Code Playgroud)
注意:对于视图,您可以将它们添加到project/apps/<name>/views文件夹并使用相同的功能对它们进行配置.
其他
有时我们还会添加project/constants一个project/utils包和一个包.
这是它的样子:
请注意,在上面的示例中,templates它们与应用程序分开,因为它的占位符目录为空.
希望它有用.来自墨西哥的问候:D.
| 归档时间: |
|
| 查看次数: |
4129 次 |
| 最近记录: |