小编Sal*_*van的帖子

反应庞大的业务应用程序的体系结构

因此,我们最近在公司中选择了React作为构建我们庞大的业务Web应用程序的前端技术.最近说,我的意思是我们之前没有React的经验(我们有很多AngularJS的背景),并且通过说大量应用程序,我的意思是它非常庞大且非常动态,有很多不同的部件和功能.

因为我们将拥有许多巨大的组件,它们都起着非常重要的作用,并且在它们内部具有复杂的逻辑,并且因为我们希望它们易于插拔和重复使用,所以我们希望它们尽可能地与外部世界隔离.我们应用程序的一部分,因为否则由于它们的大小和复杂的功能,开发和维护它们几乎是不可能的.这就是我们决定不使用Redux的原因,至少在开始时,我们只是自己开发单独的组件,因为它会破坏组件隔离并使得当有如此多的复杂时,整个应用程序数据流逻辑无法理解组件.虽然我认为我们的选择可能是错误的,因为正如我已经提到的,我们没有React的经验.

正如我已经提到的,该应用程序非常动态.我的意思是组件实际上是由数据呈现的.我们使用与我们的API端点交互的各种配置提供程序类来获取应用程序配置的各个部分,例如导航,页面,各种表单,列表等的配置,然后尝试呈现从该配置中读取的组件.

问题是,经过几周努力获得React的动力并发现正确的模式和我们问题的常见解决方案,我们一直在谈论我们的工作人员,也许React对我们来说不是正确的技术,因为它是一个UI库,而不是一个框架事件,它对我们没什么帮助,但只是添加了我们必须打破的渲染规则,以实现我们想要的动态和组件独立性.

考虑到组件隔离和数据流管理,我个人听说有一种语言用于前端开发Elm,它具有非常强大的数据流架构,其中每个组件都有自己独立的模型,但我不知道是否值得一试,因为它很快就会落后于我们的大需求.

我在这里写这个问题的原因是我希望能够从那些拥有大量前端应用程序背景的人那里获得洞察力.我想知道是否可以使用React开发这样的应用程序,无论React是否适合这种复杂性和动态,我们是否真的需要Redux或其他东西,我们应该遵循什么样的路径,实践和意识形态.如果你正确地理解了我的问题,那么我们正在努力解决的架构方面比技术方面更多.也许我们正在走的路上走向越来越多的斗争和复杂性,而不是走向生产.

architecture frontend dynamic reactjs redux

25
推荐指数
6
解决办法
1万
查看次数

google maps api v2内存不足错误

我的应用程序中存在巨大的内存问题.我正在使用谷歌地图api v2 ClusterManager和自定义标记.我markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap));根据其类别通过调用为每个标记提供图像.问题是:在几次屏幕旋转后,我的应用程序因OOM错误而崩溃:

05-14 11:04:12.692  14020-30201/rokask.rideabike E/art? Throwing OutOfMemoryError "Failed to allocate a 4194316 byte allocation with 1627608 free bytes and 1589KB until OOM"
05-14 11:04:12.722  14020-30201/rokask.rideabike E/AndroidRuntime? FATAL EXCEPTION: GLThread 19179
Process: rokask.rideabike, PID: 14020
java.lang.OutOfMemoryError: Failed to allocate a 4194316 byte allocation with 1627608 free bytes and 1589KB until OOM
        at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
        at android.graphics.Bitmap.nativeCreate(Native Method)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:939)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:912)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:879)
        at com.google.maps.api.android.lib6.gmm6.n.c.i.a(Unknown Source)
        at com.google.maps.api.android.lib6.gmm6.n.c.l.a(Unknown Source)
        at com.google.maps.api.android.lib6.gmm6.n.c.l.a(Unknown Source)
        at com.google.maps.api.android.lib6.gmm6.n.c.l.b(Unknown Source)
        at …
Run Code Online (Sandbox Code Playgroud)

android bitmap out-of-memory markerclusterer google-maps-android-api-2

17
推荐指数
1
解决办法
9242
查看次数

Google登录后端服务器身份验证

我正在编写一个用于语音聊天的Android应用程序,并决定使用Google Sign-In对我的后端服务器进行简单的用户身份验证.但是,我不明白应用程序应该如何使用我的后端进行身份验证.当用户使用他的Google帐户登录并且我收到ID令牌时,我可以将ID令牌发送到服务器,然后服务器验证它.那是什么呢?如何在用户发送/接收语音消息和应用程序需要上传/邮件从服务器下载到/验证以下请求,例如?服务器需要知道哪个用户发出请求,而是因为它即将到期和完整性验证是一个复杂的,比较长的过程的ID令牌是不合适的.

authentication android backend token google-signin

12
推荐指数
1
解决办法
5596
查看次数

使用 Android 导航组件的身份验证流程

今天我开始使用 Android 的导航组件在我的应用程序中实现身份验证流程。这个想法很简单:用户启动应用程序,如果她通过了身份验证,它会显示一个 UI,如果她没有通过身份验证,则显示另一个 UI。

我所做的是在我HomeFragmentonViewCreated方法,我检查,如果用户通过验证后,如果她不是我叫NavControllernavigate()通过传递,将导航到一个动作的标识方法AuthenticationFragment。一切正常,直到用户在 中单击后退按钮AuthenticationFragment,因为然后我收到此错误。我仍然不知道该错误的实际原因是什么,但是导航发生得太快的想法似乎与我的情况相似:目的地首先从 切换AuthenticationFragmentHomeFragment然后立即从切换HomeFragmentAuthenticationFragment再次,因为HomeFragment再次发现用户未通过身份验证.

尽管我遇到了错误,但这种方法对我来说仍然是错误的。HomeFragment在她进行身份验证之前,用户不应该能够返回到(并且在片段立即来回切换时看到屏幕闪烁)。我还查看了这个Android 的官方实现身份验证流程指南,但对我来说这似乎也是错误的,因为那里涉及到多余的第三部分 UI(MainFragment)。在我的情况下,我可以用闪屏替换它,但它仍然会留在后堆栈中,用户将能够返回闪屏,这显然是无稽之谈。

那么使用 Android 的新导航组件实现身份验证流程的正确方法是什么?我想要的功能是:如果用户未通过身份验证,那么她将被重定向到身份验证 UI,如果她从那里按下后退按钮,她应该退出应用程序。

更新:我知道我可以只收听 back press 事件并从那里关闭应用程序,但我仍然希望有一些使用 Android 导航组件的优雅解决方案。

authentication android android-jetpack android-architecture-navigation

7
推荐指数
1
解决办法
2536
查看次数

显示 Fragment 中的弹出窗口

我想在单击按钮时显示扩展 Fragment 的 PlaceHodler 类中的弹出窗口。为了进行测试,我编写了这段确实有效的代码,但我想这很荒谬(使用 Button 对象作为父视图等等......我找不到另一种方法来使其工作......)。请查看这段代码并建议我如何改进它。请不要评判我,因为我是编程的初学者。

我的代码:

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        final Button button1 = (Button)rootView.findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.i("ilog", "onClick() works");
                PopupWindow pw = new PopupWindow(getActivity());
                TextView tv = new TextView(getActivity());
                LayoutParams linearparams1 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                tv.setLayoutParams(linearparams1);
                tv.setText("Testing");
                pw.setContentView(tv);
                pw.setWidth(400);
                pw.setHeight(180);
                pw.showAtLocation(button1, Gravity.CENTER_HORIZONTAL, 25, 25);
                pw.update();
            }
        }); …
Run Code Online (Sandbox Code Playgroud)

android placeholder android-fragments android-view android-popupwindow

5
推荐指数
1
解决办法
2万
查看次数

如何在应用程序/活动被杀死时避免系统查杀服务

我有一个activity和一个应用程序service.如果我在运行的activity同时杀死service它也会被杀死.对我来说,服务不会被杀死是非常重要的.如何使当系统杀死(或者我通过清除"最近的应用程序"列表杀吧)activityservice仍然有效,直到它完成它的工作?提前致谢!

service android system kill-process android-activity

5
推荐指数
1
解决办法
8178
查看次数

如何将变量分配给新对象

假设我有一行这样的代码:

MyClass obj(1, 2, "hello");
Run Code Online (Sandbox Code Playgroud)

在未来的某个时候,我想分配obj一个新值,即obj(3, 4, "bye"). 这个怎么做?

我的意思是在Java中我会这样做:

MyClass obj = new MyClass(1, 2, "hello");
obj = new MyClass(3, 4, "bye");
Run Code Online (Sandbox Code Playgroud)

C++中我尝试过这个:

MyClass obj(1, 2, "hello");
obj(3, 4, "bye");
Run Code Online (Sandbox Code Playgroud)

但它不起作用,所以我也尝试过:

MyClass obj(1, 2, "hello");
obj = MyClass(3, 4, "bye");
Run Code Online (Sandbox Code Playgroud)

它确实有效,但我不确定这是否是实现这一目标的首选方法。

请建议我一种干净的方法来为变量分配一个新对象,并告诉我在分配后是否需要任何额外的工作来管理内存。

请记住,我两天前开始学习C++ ,但我对OOP概念的了解就像我知道我的手有多少根手指一样。

c++ variables constructor object variable-assignment

5
推荐指数
1
解决办法
8472
查看次数

了解Java接口原理

我正在阅读一本Java书,并且这次再次思考这一段实际意味着什么:

接口旨在支持运行时的动态方法解析.通常,为了从一个类调用方法到另一个类,两个类都需要在编译时出现,因此Java编译器可以检查以确保方法签名是兼容的.这个要求本身就是一个静态和不可扩展的分类环境.在这样的系统中,不可避免地会在类层次结构中将功能提升得越来越高,以便机制可用于越来越多的子类.接口旨在避免此问题.它们将方法或方法集的定义与继承层次结构断开连接.由于接口与类的层次结构不同,因此在类层次结构方面不相关的类可能实现相同的接口.这是实现接口真正功能的地方.

第一个问题:作者的意思是什么from one class to another?他是否意味着这些类在层次结构方面是相关的?我的意思是,将子类对象引用分配给它的超类类型变量然后调用方法?

第二个问题:作者再次提出什么意思This requirement by itself makes for a static and nonextensible classing environment?我不明白其makes for含义(英语不是我的主要语言)以及为什么环境被称为静态和不可扩展.

第三个问题:他的意思是什么functionality gets pushed up higher and higher?为什么它会越来越高?什么功能?还有mechanisms will be available to more and more subclasses.什么机制?方法?

第四个问题:Interfaces are designed to avoid this problem.什么问题???

我知道答案必须明显,但我不知道.也许主要是因为我没有看到一些神奇的英语短语.请帮助我理解这一段的内容.

java extends interface class-hierarchy subclassing

2
推荐指数
1
解决办法
1117
查看次数

如何获取下拉菜单以覆盖其他元素

我正在创建一个小网站,当我将鼠标悬停在"画廊"按钮上时,我无法获得下拉菜单,以覆盖菜单下方的段落,而不是将整个内容推下来.我已经尝试了各种组合position: relative; z-index: 9999;.但是,当我position: absolute;<ul>元素设置它实际上工作,但弄乱了所有<ul>项目的布局.请帮助我完成这项工作,因为我开始摸不着头脑...... 这是我的代码.当您将鼠标悬停在"图库"按钮上时,您可以看到段落如何下降.我希望paragaph保持原样,下拉菜单覆盖它.

html css overlay position menu

1
推荐指数
1
解决办法
2万
查看次数