-
Notifications
You must be signed in to change notification settings - Fork 99
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
v0.12 #27
v0.12 #27
Conversation
Conflicts: revel/test.go
Import path of testsuite has been updated
Overwrites generated app files instead of deleting directory
Use a separate directory for revel project binaries
@AnonX we should have releases for this repo like we do in the core |
@brendensoares Ideally I would like to see |
@brendensoares By the way, I'd like to know more about your plans regarding |
@AnonX That's a great topic for our next team meeting. I've started a list of agenda items in our meeting notes wiki page. @revel/core please add more. I'd like to have the meeting this Friday at about 7pm GMT-8. Who can join? |
@brendensoares Cannot make it at that time, I am in PDT and that is 6pm family supper time, either 2 hours later or earlier would work. I can just leave my IRC channel open and read the notes though.. |
@brendensoares I'm in. Any time is good. |
@notzippy I would really like to do a Google hangout as screen sharing and voice chat is a huge communication boost. To start, I'm fine with using IRC, but if we're all really committed to getting Revel going at full steam, then we need to go all in. I think we should create a temporary IRC channel such as @AnonX excellent. |
@brendensoares You hadn't mentioned what form the meeting would be in so I had assumed irc... I can do a hangout or utox if you really want privacy.. That time slot I cannot do though, earlier or later works. Sorry |
@notzippy Sorry, my fault, I am PDT, too (Vegas), I just thought we were same as PST/GMT-8 right now, not PDT. How is 7/8pm your time (and mine), PDT? @revel/core ? As far as the medium, I don't care. Privacy is not important to me, especially in the context of an open source project, but I'd be willing to give it a shot. I've heard of Tox, but never used it. Let's give it a shot. It looks like a neat solution, but does it allow desktop sharing? We can use Mikogo for that if needed. |
Sorry, looks like I cannot take part in the meeting But I have some ideas on how to restructure revel and turn it into simple, modular, clean Go wayish solution. I'll prepare a presentation and show it to you (pictures and few words are more interesting than text, right?). Actually, I wanted to create my own framework. But if you're open to fundamental changes it would be cool to implement them here. |
@AnonX I am also thinking along the lines of modularity and looking forward to see how your thoughts align with mine 👍 @brendensoares Has anyone else confirmed for the meeting tonight ? |
@notzippy just you and @AnonX. @pedromorgan is MIA. This is the battle we have to overcome; working together toward a unified goal. @AnonX are you joining our meeting or no? I knew I shouldn't have asked you any personally identifying questions; conflicts too much with your need to feel anonymous 👅 @AnonX @notzippy I'm open to restructuring if it improves the perceived workflow of Revel. I, like you 2, want Revel to enable a fast development cycle by using common conventions, e.g. MVC. I don't think a microframework structure can scale well for large apps. Sinatra is great for quick hacking, but Rails has its popularity for a reason: rapid application development. I want to take as many good ideas from other frameworks as possible and I could care less about Go idioms since they are highly subjective. I plan on using reflection no matter what the purists say. I have no problem incorporating I really hope we can get into a good groove and not let the roadmap drown us in decisions. @AnonX I really hope you join us tonight at 8pm PDT. 👍 |
@brendensoares Being idiomatic, modular and simple doesn't mean it has to be less productive. The architecture Revel Framework has now:
Illustration of current architecture: My proposal includes:
//go:generate revel generate handlers -c github.com/anonx/sample/app/controllers -v github.com/anonx/sample/app/views -h github.com/anonx/sample/app/handlers So, after every package handlers
import (
"github.com/anonx/sample/app/controllers"
)
// AppIndex is just a sample.
func AppIndex(w http.ResponseWriter, r *http.Request) {
c := &controllers.App{}
c.Initialize(w, r)
// Do you remember the plans about magic Before, After, etc. methods
// instead of interceptors?
defer c.Finally()
c.Before()
// Call Index action.
c.Index()
c.After()
}
package routes
import (
"github.com/anonx/sample/app/handlers"
)
Context := httprouter.New()
Context.GET("/", handlers.AppIndex)
http.ListenAndServe(conf.StringDefault("http.addr"), routes.Context) Illustration of a new architecture: Revel is still high level, but focus is on developer's app rather than on My message is too long, so I'll not include details about filters. But I think they were not supposed to be used for Revel's extendibility. They are more kind of for structuring framework's code at an early stage of development when it is not clear yet what to do with the architecture. So, kind of short term solution for framework's developer himself. And if we want to promote it as a way of extendibility, we should come up with an idea of a better approach. |
I agree with most everything you're saying. Flexibility and simplicity are key indicators of good code quality and your general direction is spot on. Filters are present to allow easy manipulation of the HTTP request and response. I don't think they exist to help develop Revel as a framework. I do see value in making certain things part of Revel, but that doesn't make filters a bad design choice. Modular code is good. I have more to say about your awesome diagrams. |
One of the primary reasons why I choose Revel was the way it supported modules, making them (almost) first class containers. To me a bright future for Revel relies on keeping this advantage. If you needed an authentication package - just add this module, if you needed a forum add this module, etc. etc. What I am struggling with your diagrams is how modules will fit into this scheme. Are pluggable modules going to be part of this ? Will you be able to override views like you can currently ? |
@notzippy I agree that modules, aka modular code, is very valuable. I don't see any reason modular loading can't stay with what @AnonX is proposing. @AnonX your diagrams need some clarification, but I like them a lot. Good stuff! I'm not a huge fan of plug and play frameworks in the sense that you can use only the pieces you want. It's one thing to have a core with optional modules, but I think it complicates the implementation by not having guaranteed assumptions always true. For example, the file structure is a big part of what make a Revel app different from other Go web apps; it's a convention, that once learned, can be taken for granted as always true. If a developer has worked with Revel before, then they can work on any Revel apps, because they follow certain conventions. So there is value in optional modules, but we do need a fixed, static core. I like the idea of a handlers package. I think this will make Revel's request flow a lot clearer and less magical. Let me point out that I think magic is a very good thing, but when you want to understand the magic trick, it shouldn't be difficult. Conventions are magical and very useful. I haven't worked with
Action ItemsThis thread has gone off topic from its initial purpose. Let's end it here and make forward progress on this proposal. I'm going to refer to this proposal as
|
@notzippy I see your concern about modules. @AnonX I don't think your new proposal will support modules as we currently have them. Currently, revel takes an |
@brendensoares I didn't say we do not need filters. The idea is filters we have are not good. Mainly because they cannot create their own variables. Here is a possible solution: We may have type Controller struct {
*revel.Controller
*session.Filter
*session.FlashFilter
} So, filters are in the form of controllers. Every of them has type App struct {
Controller // Embed local controller rather than revel.Controller.
}
No, it's not a convention. Right now it's a hard coded requirement. And this proposal is about making it a convention.
Wikipedia.
It still will be magical for those for whom it's OK. And users who'd like more control will get it.
Why not? |
No description provided.