[ 
https://issues.apache.org/jira/browse/FLINK-11409?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16757323#comment-16757323
 ] 

Dawid Wysakowicz edited comment on FLINK-11409 at 1/31/19 3:00 PM:
-------------------------------------------------------------------

Ok, now I see your point, I don't entirely agree though this is the pattern 
that we use/encourage users to use for {{Rich}} versions, as for 
{{MapFunction}}, {{FilterFunction}} etc. we have their corresponding 
{{RichMapFunction}}, {{RichFilterFunction}}.

Now I understand your suggestion I would say I like it in general, as it tries 
to separate those two (or even more) topics. I'm afraid though the current 
policy is that we don't break event the {{@PublicEvolving}} contract...


was (Author: dawidwys):
Ok, now I see your point, I don't entirely agree though this the pattern that 
we use/encourage users to use for {{Rich}} versions, as for {{MapFunction}}, 
{{FilterFunction}} etc. we have their corresponding {{RichMapFunction}}, 
{{RichFilterFunction}}.

Now I understand your suggestion I would say I like it in general, as it tries 
to separate those two (or even more) topics. I'm afraid though the current 
policy is that we don't break event the {{@PublicEvolving}} contract...

> Make `ProcessFunction`, `ProcessWindowFunction` and etc. pure interfaces
> ------------------------------------------------------------------------
>
>                 Key: FLINK-11409
>                 URL: https://issues.apache.org/jira/browse/FLINK-11409
>             Project: Flink
>          Issue Type: Improvement
>          Components: DataStream API
>            Reporter: Kezhu Wang
>            Assignee: Kezhu Wang
>            Priority: Major
>              Labels: Breaking-Change
>
> I found these functions express no opinionated demands from implementing 
> classes. It would be nice to implement as interfaces not abstract classes as 
> abstract class is intrusive and hampers caller user cases. For example, 
> client can't write an `AbstractFlinkRichFunction` to unify lifecycle 
> management for all data processing functions in easy way.
> I dive history of some of these functions, and find that some functions were 
> converted as abstract class from interface due to default method 
> implementation, such as `ProcessFunction` and `CoProcessFunction` were 
> converted to abstract classes in FLINK-4460 which predate -FLINK-7242-. After 
> -FLINK-7242-, [Java 8 default 
> method|https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html]
>  would be a better solution.
> I notice also that some functions which are introduced after -FLINK-7242-, 
> such as `ProcessJoinFunction`, are implemented as abstract classes. I think 
> it would be better to establish a well-known principle to guide both api 
> authors and callers of data processing functions.
> Personally, I prefer interface for all exported function callbacks for the 
> reason I express in first paragraph.
> Besides this, with `AbstractRichFunction` and interfaces for data processing 
> functions I think lots of rich data processing functions can be eliminated as 
> they are plain classes extending `AbstractRichFunction` and implementing data 
> processing interfaces, clients can write this in one line code with clear 
> intention of both data processing and lifecycle management.
> Following is a possible incomplete list of data processing functions 
> implemented as abstract classes currently:
>  * `ProcessFunction`, `KeyedProcessFunction`, `CoProcessFunction` and 
> `ProcessJoinFunction`
>  * `ProcessWindowFunction` and `ProcessAllWindowFunction`
>  * `BaseBroadcastProcessFunction`, `BroadcastProcessFunction` and 
> `KeyedBroadcastProcessFunction`
> All above functions are annotated with `@PublicEvolving`, making they 
> interfaces won't break Flink's compatibility guarantee but compatibility is 
> still a big consideration to evaluate this proposal.
> Any thoughts on this proposal ? Please must comment out.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to