Architecture 最先进的导航和;使用Xamarin表单和ReactiveUI进行路由

Architecture 最先进的导航和;使用Xamarin表单和ReactiveUI进行路由,architecture,xamarin.forms,navigation,reactiveui,Architecture,Xamarin.forms,Navigation,Reactiveui,每年左右,我都会有一个移动应用程序要做,我会选择Xamarin表单来做。在开始一个空白项目之前,我试图了解哪些框架和模式是“趋势”,并试图构建一些可靠的东西 在我的上一个应用程序中,我的研究引导我使用Autofac为IoC和MvvmLight定制了一个设置,另外还有一系列其他的定制服务,可以很好地使用它们 由于我来自网络,我没有逃脱到被动扩展的浪潮,特别是作为一个角度开发人员。 所以,这一次,我的设置是基于Splat(我更喜欢Autofac,但是…,你知道)和ReactiveUI的 我很满意。

每年左右,我都会有一个移动应用程序要做,我会选择Xamarin表单来做。在开始一个空白项目之前,我试图了解哪些框架和模式是“趋势”,并试图构建一些可靠的东西

在我的上一个应用程序中,我的研究引导我使用Autofac为IoC和MvvmLight定制了一个设置,另外还有一系列其他的定制服务,可以很好地使用它们

由于我来自网络,我没有逃脱到被动扩展的浪潮,特别是作为一个角度开发人员。 所以,这一次,我的设置是基于Splat(我更喜欢Autofac,但是…,你知道)和ReactiveUI的

我很满意。 然而,在我的上一个应用程序中,有一件事我非常不满意:导航。web上的大多数示例都是基本的(基本导航页面上的push/pop),没有任何库可以很好地实现这一点,而ReactiveUI的导航是。。。嗯

因此,我必须创建自己的根视图和导航服务,我的意思是,我没有编写它,但是(如果您有兴趣回答我的问题,我建议您查看impl,以便更好地了解给定用例的限制)。看起来不错。起初我很喜欢它,在我不得不处理更复杂的场景之前,比如导致
MasterDetailPage
TabbedPage
的登录页面

同样,我花了数小时与晦涩难懂的X.F或Android异常和复杂的导航逻辑作斗争,以使服务能够处理非常常见的用例。我在网上找不到有效的示例,看起来每个人都只构建了三个屏幕的示例应用程序,除了导航页面之外没有其他内容

我迷路了

这是我目前拥有的API,来自Kent Boogaart的博客

根视图:

public interface IView
{
    IObservable<IViewModel> PagePopped { get; }

    IObservable<Unit> PushPage(IViewModel pageViewModel, string contract, bool resetStack, bool animate);

    IObservable<Unit> PopPage(bool animate);

    IObservable<Unit> PushModal(IViewModel modalViewModel, string contract);

    IObservable<Unit> PopModal();
}
公共接口IView
{
IObservable页面弹出{get;}
IObservable PushPage(IViewModel pageViewModel、字符串协定、bool resetStack、bool animate);
可观测罂粟花(布尔动画);
IObservable PushModal(IViewModel modalViewModel,字符串契约);
IObservable popmodel();
}
服务:

public interface IViewStackService
{
    IView View { get; }

    IObservable<IImmutableList<IViewModel>> PageStack { get; }

    IObservable<IImmutableList<IViewModel>> ModalStack { get; }

    IObservable<Unit> PushPage(
        IViewModel page,
        string contract = null,
        bool resetStack = false,
        bool animate = true);

    IObservable<Unit> PopPage(bool animate = true);

    IObservable<Unit> PushModal(IViewModel modal, string contract = null);

    IObservable<Unit> PopModal();
}
公共接口服务
{
IView视图{get;}
IObservable页面堆栈{get;}
IObservable ModalStack{get;}
IObservable推页(
IViewModel页面,
string contract=null,
bool resetStack=false,
bool animate=true);
IObservable PopPage(bool animate=true);
IObservable pushmodel(IViewModel model,string contract=null);
IObservable popmodel();
}
我想做的是:

--------------------------
| navigation page        | <- user not logged in, it's the root page
| --------- ------------ |
| | login | | register | |
| --------- ------------ |
|------------------------|
      |
      | -> user logs in
      |    via a hack, i can replace the root page with the masterdetails created by hand
      |    and reuse my previous root navigation page from the login screen as the new root,
      |    setting it as the Detail page (so the MasterDetail is not handled by my service)
      V
----------------------------------
| masterdetail page              |
| --------------------------     | -> this begins to get really complicated
| | detail 1 / tabbed page |     |
| | ---------- ----------  |     |
| | | page 1 | | page 2 |  |     |
| | ---------- ----------  |     |
| --------------------------     |
| ------------------------------ |
| | detail 2 / navigation page | | -> this could be doable with the current implementation
| | ----------  -------        | |    but erh..
| | | page 1 |->| etc |        | |
| | ----------  -------        | |
| ------------------------------ |
----------------------------------
--------------------------

|导航页面|我使用MVVMV框架Freshmvvm。它有很好的导航功能,允许我在从登录堆栈移动到主堆栈时在导航“堆栈”之间切换。它的界面与您展示的界面相似。它允许我扩展或替换导航功能。它提供了一个基本的IOC容器,可以进行交换。它可以扩展以支持带有选项卡式页面的主控详细信息。我还没有发现一个我不能使用或扩展它的情况


我在github上有一个示例应用程序,它使用ReactiveUI在登录页面和MasterDetailPage之间切换。我不知道我是否正确地实现了这一点,但它似乎工作得很好

无法解释的否决票?很抱歉,我没有提出一个允许轻松销售的问题。我不同意反对票,我把票调高了:)From:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题因堆栈溢出而偏离主题,因为它们往往会吸引固执己见的答案和垃圾邮件”我真的很惊讶这是离题的。我经常找到(并搜索!)这样的主题,我发现它们非常有教育意义和有用。我是否应该发布一个新问题“帮助,这项服务不起作用,你能修复它吗”?如果这是一个措辞问题…一个有趣的问题。仅仅因为这不是一个关于坏代码的问题就将其标记为离题,这是一种下意识的反应。确实非常有希望,乍一看它看起来非常灵活。我只是想知道这是否会增加太多的开销/复杂性,因为我已经有了ReactiveUI和Splat——我需要两个兼容层(ReactiveUI需要Splat)。我会仔细研究一下,看看这是否能很好地完成,或者从中获得一些灵感。谢谢